2

UTF-8でエンコードされた文字列値があります。ただし、Unicode文字が含まれている場合もあります。

例:

"\u0131".encoding
=> #<Encoding:UTF-8>

「\u0131」は「ı」です。

すべてのUnicode文字をutf-8に変換するにはどうすればよいですか?

ありがとう

Çağdaş

4

2 に答える 2

7

内部的には、この文字列では、すべての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です

于 2013-02-01T08:53:33.107 に答える
1

utf-8 は Unicode 文字のエンコーディングです。何も変換する必要はありません。文字は既に utf-8 でエンコードされています。それらが表示される\u0131ıどうかは、表示するプログラムに依存します。

于 2013-02-01T08:50:33.723 に答える