ruby 1.9 : Convert byte array to string with multibyte UTF-8 characters

标签 ruby unicode utf-8

我正试图在 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/

相关文章:

utf-8 - 为什么非 ASCII 字符在函数/变量名称中仍然不受欢迎?

ruby-on-rails - 如何在该应用程序中显示 Rails 应用程序的 git 分支?

ruby-on-rails - 使用本地 :path before deploy 检查 gem

python-3.x - 'cp93 2' codec can' t 编码字符 '\u98c8' 在位置 32 : illegal multibyte sequence

php - 截断 UTF-8 字符串以适应 PHP 中给定的字节数

python - 打印家庭表情符号,使用 U+200D 零宽度连接符,直接打印,对比通过列表

ruby-on-rails - 未初始化的常量 Mail::Ruby19

ruby - 如何使用 Rake 输入文件名生成输出文件名?

java - NetBeans 6.7.1 中的 Unicode

C++ Windows 十进制到 UTF-8 字符转换