我有一个以 UTF-8 编码的字符串值。但它们也可能包含 unicode 字符。
例如;
"\u0131".encoding
=> #<Encoding:UTF-8>
“\u0131”是“ı”。
如何将所有 unicode 字符转换为 utf-8?
谢谢
恰达什
在内部,在此字符串中,所有 unicode 字符都已表示为 utf-8 字节。让我们检查一下。
> "\u0131".bytes.to_a
=> [196, 177]
好的,有两个字节,但它们是 UTF-8 还是 UTF-16 字节?最简单的检查方法是查看二进制表示。让我们迭代每个字节并以二进制基数打印它们:
>> "\u0131".each_byte {|b| print b.to_s(2)};puts
1100010010110001
=> nil
这是您的字符串的二进制表示 - 如您所见,这是 char 的正确 UTF-8 两字节序列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
或ı
取决于显示程序。