1

"\xBD"UTF-8に変換したいとします。

pack&を使用するとunpack、次のようになります½

puts "\xBD".unpack('C*').pack('U*')    #=> ½

ISO-8859-1のよう"\xBD"に。½

しかし、ISO-8859-9にあり"\xBD"ます。œ

私の質問はpack、charをUTF-8に変換するためにISO-8859-9の代わりにISO-8859-1を使用したのはなぜですか?その文字エンコードを構成する方法はありますか?

IconvRuby 1.8.7とString#encode1.9.2で使用できることは知っていますpackが、一部のコードで使用しているので気になります。

4

1 に答える 1

4

\xBDこれは実際にはISO-8859-xでの表現方法とは何の関係もありません。重要な部分はpackUTF-8への移行です。

pack受信します[189]。コードポイント189は、UTF-8(より正確にはUnicode)でとして定義されてい½ます。これを、ISO-8859-9よりもISO-8859-1を「優先する」ためのUnicode仕様の作成者とは考えないでください。彼らはどのコードポイントが表されるかを選択する必要があり、½189を選択しただけです。

あなたはpack/についてもっと学ぼうとしているので、もっとunpack説明させてください:

ディレクティブをunpack使用するとC、rubyは文字列をASCII-8ビットとして解釈し、ASCIIコードを抽出します。この場合、別名\xBDに変換されます。これは本当に基本的な変換です。0xBD189

ディレクティブをpack使用するとU、rubyはUTF-8変換テーブルを検索して、配列内の各整数にマップされるコードポイントを確認します。

pack/unpack提供するディレクティブに応じて、非常に特殊な動作をします。ruby-doc.orgを読むことをお勧めします。いくつかの指令はまだ私には意味がないので、落胆しないでください。

于 2012-07-12T18:54:19.190 に答える