【问题标题】:can't convert "[" with encoding "gb2312" to "utf-8" in ruby1.9.3无法在 ruby​​1.9.3 中将编码为“gb2312”的“[”转换为“utf-8”
【发布时间】:2013-10-27 13:03:24
【问题描述】:

我正在学习 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 utf-8


    【解决方案1】:

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

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

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

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

    如果你有一个包含混合字符编码的字符串,那你就完蛋了。没有很多猜测是无法找出答案的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 2012-10-23
      • 1970-01-01
      • 2012-06-30
      • 2011-06-26
      • 2014-02-02
      • 2018-11-12
      • 2011-10-26
      相关资源
      最近更新 更多