ルビー1.8とUTF-8の文字列の場合ステートメントは、比較します
-
20-08-2019 - |
質問
私は、私は私の共有ウェブホスティングではcronで実行(LIB /作業ディレクトリ内の)rakeタスクを持っています。問題は、私はケースなステートメントを使用してUTF-8文字列を比較したいが、私のソースコードはUTF-8エンコードされていないということです。私はUTF-8としてソースコードを保存した場合、私はそれを起動しようとするとエラーがあります:(
私は何をすべきか?
外部UTF-8 txtファイルからこの文字列を読み取ることができますか?
P.S。私は、Ruby 1.8を使用しています。
P.S。私はこの方法を比較する意味:
result = case utf8string
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end
解決
私はあなたがBOMは、のないのUTF-8のために必要であるとしてあなたのテキストエディタを変更する必要があると思います。 UTF-8は、バイト順序依存ではありません。詳細については、リンクテキストを参照してください。
他のヒント
私は私の問題は、ケースなステートメントではないことがわかった。
問題は、私はUTF-8形式で私のソースコードを保存するとき、私のテキストエディタは、そのエンコーディングがUTF-8であることを示すために先頭に3バイト(BOM)を追加するということでした。
の Q:?BOMとは何であるの
の A:のバイトオーダーマーク(BOM)は、文字コードで構成されてい それはとして使用することができるデータストリームの始めにU + FEFF 主にマークされていないのバイト順と符号化形式を定義する署名 プレーンテキストファイル。いくつかの上位レベルのプロトコルの下では、BOMの使用であってもよいです そのプロトコルで定義されたUnicodeデータストリームにおける必須の(又は禁止)。
私が手にエラーが発生しました:
1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression
activesupportののレールからmb_chars
方法を使用してみてください枠組みます:
result = case utf8string.mb_chars
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end