½ 因为 "\-6ren">
gpt4 book ai didi

ruby - 转换为utf8和从utf8转换时如何打包和解包猜测字符编码?

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:09 25 4
gpt4 key购买 nike

假设我想将 "\xBD" 转换为 UTF-8。

如果我使用pack & unpack,我会得到½:

puts "\xBD".unpack('C*').pack('U*')    #=> ½

因为 "\xBD" 在 ISO-8859-1 中是 ½

但是 "\xBD" 在 ISO-8859-9 中是

我的问题是:为什么 pack 使用 ISO-8859-1 而不是 ISO-8859-9 将字符转换为 UTF-8?有什么方法可以配置该字符编码吗?

我知道我可以在 Ruby 1.8.7 中使用 Iconv,在 1.9.2 中使用 String#encode,但我对 pack 很好奇code> 因为我在一些代码中使用了它。

最佳答案

这实际上与 \xBD 在 ISO-8859-x 中的表示方式无关。关键部分是将 pack 转换为 UTF-8。

接收[189]。代码点 189 在 UTF-8(更准确地说,Unicode)中定义为 ½。不要将此视为 Unicode 规范编写者“更喜欢”ISO-8859-1 而不是 ISO-8859-9。他们必须选择代表 ½ 的代码点,而他们只选择了 189。

既然你想了解更多关于pack/unpack的知识,那么让我解释一下:

当您使用 C 指令解包时,ruby 将字符串解释为 ascii-8bit,并提取 ascii 代码。在这种情况下,\xBD 转换为 0xBD a.k.a. 189。这是一个非常基本的转换。

当您使用U 指令pack 时,ruby 将在其UTF-8 转换表中查找哪些代码点映射到数组中的每个整数。

pack/unpack 具有非常具体的行为,具体取决于您提供的指令。我建议阅读 ruby​​-doc.org。有些指令对我来说仍然没有意义,所以不要气馁。

关于ruby - 转换为utf8和从utf8转换时如何打包和解包猜测字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com