UTF-8でエンコードされた文字列値があります。ただし、Unicode文字が含まれている場合もあります。
例:
"\u0131".encoding
=> #<Encoding:UTF-8>
「\u0131」は「ı」です。
すべてのUnicode文字をutf-8に変換するにはどうすればよいですか?
ありがとう
Çağdaş
内部的には、この文字列では、すべてのUnicode文字がすでにutf-8バイトとして表されています。確認してみましょう。
> "\u0131".bytes.to_a
=> [196, 177]
OK、2バイトありますが、UTF-8またはUTF-16バイトですか?確認する最も簡単な方法は、バイナリ表現を調べることです。各バイトを繰り返して、2進基数で出力してみましょう。
>> "\u0131".each_byte {|b| print b.to_s(2)};puts
1100010010110001
=> nil
これは文字列のバイナリ表現です—ご覧のとおり、これはcharの正しいUTF-8 2バイトシーケンスです100110001
。つまり、0x0131
:
110 00100 10 110001
--- -- ← UTF-8 markers for 2-byte char
===== ====== ← bits of your char
したがって、答えは—何もしないでください。文字列はすでにutf-8、QEDです
utf-8 は Unicode 文字のエンコーディングです。何も変換する必要はありません。文字は既に utf-8 でエンコードされています。それらが表示される\u0131
かı
どうかは、表示するプログラムに依存します。