我正在学习 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}"
如果你有一个具有混合字符编码的字符串,你就很糟糕了。没有大量的猜测就没有办法找出答案。