2

共有 Web ホスティングで cron を使用して実行する Rake タスク (lib/tasks ディレクトリ内) があります。問題は、case ステートメントを使用して UTF-8 文字列を比較したいのですが、ソース コードが UTF-8 でエンコードされていないことです。ソース コードを UTF-8 として保存すると、起動しようとするとエラーが発生します :(

私がしなければならないこと?

この文字列を外部の UTF-8 txt ファイルから読み取ることができますか?

PS私はRuby 1.8を使用しています

PS私はこのように比較することを意味します:

result = case utf8string
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
4

3 に答える 3

2

私の問題はケースステートメントではないことがわかりました

問題は、ソース コードを UTF-8 形式で保存すると、エンコーディングが UTF-8 であることを示すために、テキスト エディターが先頭に 3 バイト (BOM) を追加することでした。

Q: BOM とは何ですか?

A:バイト オーダー マーク (BOM) は、データ ストリームの先頭にある文字コード U+FEFF で構成され、主にマークされていないプレーンテキスト ファイルのバイト オーダーとエンコード形式を定義する署名として使用できます。一部の上位レベルのプロトコルでは、そのプロトコルで定義された Unicode データ ストリームで BOM の使用が必須 (または禁止) になる場合があります。

UTF-8、UTF-16、UTF-32 & BOM

私が得たエラーは次のとおりです。

1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression
于 2008-12-10T08:34:27.077 に答える
1

UTF-8ではBOMは必要ないため、テキストエディタを変更する必要があると思います。UTF-8はバイトオーダーに依存しません。詳細については、リンクテキストを参照してください。

于 2008-12-11T09:57:48.687 に答える
0

mb_charsRails のActiveSupportフレームワークのメソッドを使用してみてください。

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
于 2008-12-09T21:18:39.920 に答える