转换已经用UTF-8编码的ruby字符串中的unicode字符

Çağ*_*daş 1 ruby string unicode encoding utf-8

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

对于前

"\u0131".encoding
=> #<Encoding:UTF-8>
Run Code Online (Sandbox Code Playgroud)

"\ u0131"是"ı".

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

谢谢

Çağdaş

NIA*_*NIA 7

在内部,在此字符串中,所有unicode字符都已表示为utf-8字节.我们来检查吧.

> "\u0131".bytes.to_a
=> [196, 177]
Run Code Online (Sandbox Code Playgroud)

好的,有两个字节,但它们是UTF-8还是UTF-16字节?最简单的检查方法是查看二进制表示.让我们迭代每个字节并以二进制基数打印它们:

>> "\u0131".each_byte {|b| print b.to_s(2)};puts
1100010010110001
=> nil
Run Code Online (Sandbox Code Playgroud)

这是你的字符串的二进制表示 - 正如你所看到的,这是char的正确UTF-8双字节序列100110001,即0x0131:

110 00100 10 110001
---       --        ? UTF-8 markers for 2-byte char
    =====    ====== ? bits of your char
Run Code Online (Sandbox Code Playgroud)

所以答案是 - 什么也不做.该字符串已经是utf-8,QED