2

我有一个以 UTF-8 编码的字符串值。但它们也可能包含 unicode 字符。

例如;

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

“\u0131”是“ı”。

如何将所有 unicode 字符转换为 utf-8?

谢谢

恰达什

4

2 回答 2

7

在内部,在此字符串中,所有 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

于 2013-02-01T08:53:33.107 回答
1

utf-8 是 unicode 字符的编码。您无需转换任何内容,您的字符已经以 utf-8 编码。它们是否显示为\u0131ı取决于显示程序。

于 2013-02-01T08:50:33.723 回答