我正试图在 Ruby 中找到一种方法来获取 UTF-8 字节数组并将其转换回字符串。
在 irb(Ruby 1.9.2 预览版 3)中,我可以从 UTF-8 字符串创建正确的字节数组:
ruby-1.9.2-preview3 > 'Café'.bytes.to_a
=> [67, 97, 102, 195, 169]
但是,我找不到从字节返回数组的方法。我尝试将 Array.pack 与 U* 选项一起使用,但这不适用于多字节字符。
ruby-1.9.2-preview3 > [67, 97, 102, 195, 169].pack('U*')
=> "Café"
有没有人知道如何将包含多字节字符的 UTF-8 字节数组转换回字符串?
谢谢。
最佳答案
这与 pack
解释其输入数据的方式有关。您示例中的 U*
导致它转换 输入数据(我假设假定为默认字符集;我真的找不到任何相关文档) 到 UTF-8,因此是双重编码。相反,只需打包字节并解释为 UTF-8:
irb(main):010:0> [67, 97, 102, 195, 169].pack('C*').force_encoding('utf-8')
=> "Café"
关于 ruby 1.9 : Convert byte array to string with multibyte UTF-8 characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4433093/