2

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

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

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

4

1 回答 1

1

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

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

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

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

如果您有一个包含混合字符编码的字符串,那您就大错特错了。没有很多猜测,就没有办法找出答案。

于 2013-10-27T14:12:31.483 回答