puts "C3A9".lines.to_a.pack('H*').encoding
结果
ASCII-8BIT
但我更喜欢UTF-8中的这个文字。但
"C3A9".lines.to_a.pack('H*').encode("UTF-8")
结果
`encode': "\xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
为什么呢?如何将其转换为UTF-8?
答案 0 :(得分:6)
你这是错误的方式。如果你有这样的URI编码数据:
%C5%BBaba
然后您应该使用URI.unescape
对其进行解码:
1.9.2-head :004 > URI.unescape('%C5%BBaba')
=> "Żaba"
如果这不起作用,则强制编码为UTF-8:
1.9.2-head :004 > URI.unescape('%C5%BBaba').force_encoding('utf-8')
=> "Żaba"
答案 1 :(得分:4)
ASCII-8bit
是Ruby的原始编码。它有BINARY
的别名,就是这样。 ASCII-8bit
不是字符编码,而是一种表示字符串是二进制数据而不是像文本一样处理的方式。由于pack
/ unpack
函数旨在对二进制数据进行操作,因此除非ENTIRE包字符串由字符派生词组成,否则不应假设返回的内容在任何编码下都是可打印的。如果你澄清总体目标是什么,也许我们可以给你一个更好的解决方案。
如果将十六进制UTF-8代码隔离到变量中,请说code
这是十六进制格式的字符串减去百分号:
utf_char=[code.to_i(16)].pack("U")
将这些与字符串的其余部分结合起来,就可以制作字符串了。