我正在学习ruby并尝试从ftp服务器获取文件名。我得到的字符串是用 gb2312(简体中文) 编码的,在大多数情况下使用这些代码都很成功:
str = str.force_encoding("gb2312")
str = str.encode("utf-8")
但如果字符串包含符号"in encode': "\xFD" followed by "\x88" on GB2312 (Encoding::InvalidByteSequenceError)"
或"["
,则会出错"【"
。
答案 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}"
如果你有一个具有混合字符编码的字符串,那你就搞砸了。没有很多猜测就没有办法找到答案。