无法在ruby1.9.3中将“[”与编码“gb2312”转换为“utf-8”

时间:2013-10-27 13:03:24

标签: ruby encoding utf-8

我正在学习ruby并尝试从ftp服务器获取文件名。我得到的字符串是用 gb2312(简体中文) 编码的,在大多数情况下使用这些代码都很成功:

str = str.force_encoding("gb2312")
str = str.encode("utf-8")

但如果字符串包含符号"in encode': "\xFD" followed by "\x88" on GB2312 (Encoding::InvalidByteSequenceError)""[",则会出错"【"

1 个答案:

答案 0 :(得分:0)

Ruby编码允许大量内省。这样,您可以很好地了解如何处理给定的字符串:

"【".encoding
=> #<Encoding:UTF-8>
"【".valid_encoding?
=> true
"【".force_encoding("gb2312").valid_encoding?
=> false

这表明此角色不符合给定的字符集!如果您需要转换所有这些字符,可以使用encode方法并提供默认值或替换未定义的字符,如下所示:

"【".encode("gb2312", invalid: :replace, undef: :replace)
=> "\x{A1BE}"

如果你有一个具有混合字符编码的字符串,那你就搞砸了。没有很多猜测就没有办法找到答案。