无法将带有编码"gb2312"的"["转换为 Ruby1.9.3 中的"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)"如果字符串包含符号"[""【",则会出错。

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

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

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

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

如果你有一个具有混合字符编码的字符串,你就很糟糕了。没有大量的猜测就没有办法找出答案。

最新更新