2010-07-20 11 views
32

İçinde çok sayıda Kiril alfabesi olan bir Rails projem var.Sihirli kodlama yorumunu Ruby 1.9'daki her UTF-8 dosyasının üstüne koymaktan nasıl kaçınabilirsiniz?

Ruby 1.8 üzerinde iyi çalıştı, ancak Ruby, kaynak dosyanın en üstünde bir # encoding: utf-8 açıklaması sağlamadığınız sürece kaynak dosyaları US-ASCII kodlu olduğunu varsayar. Bu noktada dosyalar US-ASCII olarak kabul edilmez.

Ruby'ye "Bu uygulama UTF8 kodlu. Lütfen tüm ve dahil edilen kaynak dosyaları, aksi belirtilmedikçe UTF8 olarak dikkate alın" diyerek daha basit bir yol var mı?


GÜNCELLEME:

Ben gerekli olması durumunda otomatik olarak kodlama yönergesi ekler "How to insert the encoding: UTF-8 directive automatically in Ruby 1.9 files" yazdı.

+2

James Gray Unicode ve Ruby ile uğraşan [yazı dizisi] (http://blog.grayproductions.net/articles/the_unicode_character_set_and_encodings) yazdı. Kaynak dosyaları işleme, bu dizinin bir parçasıydı. İyi bir okuma. –

+0

5 yıl sonra: Varsayılan UTF-8 (https://www.ruby-lang.org/en/news/2013/02/24/ruby-2-0-0-p0- olduğu 2.0+ yakut yükseltme is-released /) –

cevap

5

Açık, örtük olmaktan iyidir. Kodlamanın adını yazmak, metin düzenleyiciniz, yorumcunuz ve dosyaya bakmak isteyen herkes için iyidir. Farklı platformlar farklı varsayılanlara sahiptir - UTF-8, Windows-1252, Windows-1251, vs. - ve otomatik olarak diğerini seçerseniz, taşınabilirlik veya platform entegrasyonunu engellersiniz. Daha açık kodlamalar gerektiren iyi bir şeydir.

Rails uygulamanızı GetText ile bütünleştirmek iyi bir fikir olabilir. Sonra tüm UTF-8 dizeleriniz az sayıda çeviri dosyasına ayrılacak ve Ruby modülleriniz ASCII temiz olacaktır.

+0

+1 ASCII olmayan dizeleri ayrı bir dosyaya bölmek, sorunu çözmenin harika bir yoludur. Veya bir DB veya YAML dosyasına bir tabloya koyun, bu da kaynak koduna dokunmak zorunda kalmadan dili düzeltmeyi kolaylaştırır. –

+2

Açık kodlama gerektiren iyidir. Ancak, Ruby, tüm dosyalar için örtülü olarak ASCII-8BIT'i seçiyor. Açıkça farklı bir varsayılan ayarlamak mümkün olmalıdır. Örneğin, tamamen UTF-8 dizeleri kullanan uygulamalar için, her dosyaya sihirli bir yorum eklemek zorunda olmak mantıklı değil, evet? – jpgeek

0

Bu kadar çalışmaya karışmadım, ancak UTF-8'i sağlamam gerektiğinde, $ KCODE genelini kullanıyorum. Bunu ortamınıza yerleştirmeyi deneyin: $KCODE = 'UTF8'

Ayrıca editörünüzün dosyaları UTF-8 olarak kaydettiğinden emin misiniz?

+0

KCODE, kaynak ayrıştırmayı etkilemez, afaik. –

13

Ben birini yapabilirsiniz

  1. kullanım -E utf-8 komut satırı argümanı ruby düşünüyorum, ya
  2. "-E utf-8"
+0

Önerilen kullanım sadece harici kodlamayı ayarlar. Hem harici hem de dahili kodlamayı ayarlamak için '-E utf-8: utf-8' kullanın. –

1

tek şaşmaz şekilde RUBYOPT ortam değişkeni ayarlamak (ve KURU!) 1.9 yolunu Tüm dosyalarınızın (kaynak ve varlıklar) çalışma zamanında tercih ettiğiniz kodlamayla yüklendiğinden emin olmak -E komut satırı argümanını kullanmaktır.

Diğer tüm yaklaşımlar, sisteminize bağlı olarak dezavantajlara sahiptir (örneğin, ENV vars, imkansız olan üçüncü taraf kodu yüklemesi, Encoding.default_external, ... kullanımı için uygun olmayan).

My üretim sunucuları aşağıdaki sarıcı komut dosyası kullan:

#!/bin/bash 
exec /usr/local/rvm/rubies/default/bin/ruby -E utf-8:utf-8 "[email protected]" 

3

değil doğrudan bir cevap (yolunu adapte emin olun), ancak kodlama ortamına bağlı olarak size editör ilgilenmesine izin verebilirsiniz şeylerin Emacs ruby-mode, örneğin, değişken ruby-insert-encoding-magic-comment var

yakut uç kodlayan-sihirli-Yorum `yakut modunda belirlenen değişken olup.el ' Değeri, değeri

Belgeler: * Bu, ark değil, kaydetme üzerine sihirli bir emacs' kodlama 'yorumu ekleyin.

Bu değişkeni özelleştirebilirsiniz.

diğer editörler için benzer bir şey olduğuna eminim. Tabii ki, hala her dosyaya sihirli yorum eklemek anlamına gelir, ama en azından editör hatırlamak zorunda kalmadan otomatik olarak sizin için yapar. Sadece bunu yüklemek ve projenize sorun çözülecek kök magic_encoding çalıştırmak https://github.com/m-ryan/magic_encoding

:

4

Rails projesinde ihtiyacı her dosya üzerinde üst üste sihirli yorumunu ayarlayan bir mücevher var. Bence

+0

Süper basit ve son derece hızlı. – lightyrs

12

, açık daima örtülü daha iyi değildir.

Kullandığınız kaynağın neredeyse tamamı UTF-8 uyumluysa, Magic kodlama yorumunu Ruby'nin -Ku komut satırı seçeneklerini kullanarak kolayca eklemekten kaçınabilirsiniz.

-K seçeneklerinin "u" parametresini -U seçenekleri ile karıştırmayın.

-Ku : set internal and script encoding to utf-8 
-U : set internal encoding to utf-8 

Ardından, sihirli kodlama yorumunu yalnızca gereksinim duyulan komut dosyalarında ayarlayın. Unutmayın, konfigürasyondaki sözleşme!

Sen http://www.manpagez.com/man/1/ruby/ de RUBYOPT=-Ku

Bkz Ruby'nin komut satırı seçenekleri değişken ortam ayarlayabilirsiniz.

+0

Ruby'nin komut satırı seçenekleri komut satırında * nix ve Mac OS'de 'man ruby' veya' info ruby' yazarak kullanılabilir. Rails için –

+0

, '-Ku' parametresi ìn' script/rails' dosyasını ekleyin –

İlgili konular