5

Rubyの開発に非常に密接に続いて、詳細な文字エンコードがRuby1.9に実装されていることを学びました。今のところ私の質問は次のとおりです。UTF8にすべてのデータを格納するデータベースと通信するために、現時点でRubyをどのように使用できますか?

背景:私は、Ruby/RoRが少なくともオプションである新しいプロジェクトに携わっています。ただし、プロジェクトは国際化された文字セット(多くの国に広がっている)、できればUTF8に依存する必要があります。

では、どのように対処しますか?前もって感謝します。

4

3 に答える 3

1

Ruby 1.8 は、UTF-8 文字列を使用した基本的な操作で問題なく動作します。アプリケーションの必要性に応じて、一部の操作が機能しないか、期待どおりに機能しません。

例えば:

1)文字列のサイズは、マルチバイトのサポートがまだないため、文字ではなくバイトになります。しかし、文字列のサイズを文字数で知る必要がありますか?

2) 文字境界で文字列を分割しない。しかし、これが必要ですか?等。

3) Ruby でソートすると、ソート順がおかしくなる。データベースを使用してソートすることをお勧めします。

データベースから読み取った後のデータの並べ替えに関する投稿者のコメントについて: 前述のように、結果はおそらくユーザーの期待と一致しません。したがって、解決策はデータベースでソートすることです。データベースはデータをソートするように設計されています。

概要: 私の Ruby 1.8.6 RoR アプリは、最新のブラウザーで UTF-8 として処理および保存された国際 Unicode 文字で問題なく動作します。右から左への言語も正常に機能します。主な問題: データベースとすべての Web ページが UTF-8 を使用するように設定されていることを確認してください。データベースにすでにデータがある場合は、変換プロセスを経て UTF-8 に変更する必要があります。

よろしく、

ラリー

于 2009-05-10T02:49:37.543 に答える
1

「Unicode よし! Rails は常に Unicode を問題なく保存および表示できましたが、UTF-8 文字列の切り捨て、反転、または正確な長さの取得は、もう少し複雑でした。KCODE を自分でいじる必要がありました。そして、多くの人がそれを機能させましたが、プラグアンドプレイはあなたが望んでいたほど簡単ではありませんでした.

Ruby は来年の今頃までマルチバイトを認識しないため、Rails 1.2 では Unicode 文字列を操作するための ActiveSupport::Multibyte が導入されています。文字列で chars メソッドを呼び出して、バイトではなく文字の操作を開始してください。"詳細については、ここをクリックしてください。

于 2009-05-10T03:09:54.563 に答える
0

私はテストしていませんが、文字エンコード ライブラリ (現在はアルファ版) は、UTF-8 などを処理するメソッドを String クラスに追加します。RubyForge のページはこちらです。Ruby 1.8用に設計されています。

ただ私の経験上、Ruby 1.8 を使ってデータベースにデータを UTF-8 で保存する場合、HTTP ヘッダーの文字エンコーディングが UTF-8 であれば Ruby は邪魔になりません。文字列を操作できない場合がありますが、何も壊れません。例:

file.txt:
¡Hola! ¿Como estás? Leí el artículo. ¡Fue muy excellente!

私の貧しいスペイン語を許してください。これは私が思いついた Unicode の最良の例でした。

in irb:
str = File.read("file.txt")
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\n"
str += "Foo is equal to bar."
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar."
str = "    " + str + "    "
   => "    \302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar.    "
str.strip
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar."

基本的に、UTF-8 は奇数文字を含む ASCII として扱われます。コード ポイントが順不同の場合、辞書順にソートされません。ただし、コード ポイントでソートされます。例:

"\302" <=> "\301"
   => -1

とにかく、Rails アプリのデータをどの程度操作する予定ですか? ほとんどの並べ替えなどは通常、データベース エンジンによって行われます。

于 2008-10-02T00:28:54.917 に答える