【问题标题】:Errors converting from UTF-8 to latin1 using Iconv使用 Iconv 从 UTF-8 转换为 latin1 时出错
【发布时间】:2011-10-20 22:59:36
【问题描述】:

完全是 Ruby 菜鸟,只是试图破解一个脚本以使其工作。

irb(main):011:0> Iconv.iconv("LATIN1//IGNORE", "UTF-8", "Résumé")
Iconv::InvalidCharacter: "\351"
    from (irb):11:in `iconv'
    from (irb):11
    from :0
irb(main):012:0> Iconv.iconv("LATIN1//TRANSLIT//IGNORE", "UTF-8", "Résumé")
Iconv::IllegalSequence: "\351sum\351"
    from (irb):12:in `iconv'
    from (irb):12
    from :0
irb(main):002:0> "Résumé".encoding
NoMethodError: undefined method `encoding' for "R\351sum\351":String
    from (irb):2

【问题讨论】:

    标签: ruby encoding utf-8 iconv


    【解决方案1】:

    由于它已经将您的输入字符串解释为 LATIN1,因此您无法沿该路径对其进行转换。您可能需要将编码设置为 UTF-8 才能启动。 \351 是一个 LATIN1 é 字符。

    您想要以下结果:

    "Résumé".encoding
    # => #<Encoding:UTF-8>
    

    您可以检查您的 LANG 环境变量,或者您的平台用来确定默认字符编码的任何内容。

    【讨论】:

    • 感谢您的帮助。这是我得到的: irb(main):002:0> "Résumé".encoding NoMethodError: undefined method `encoding' for "R\351sum\351":String from (irb):2
    • 看起来你正在使用 Ruby 1.8.x。它对字符编码几乎一无所知,因此它将受制于您使用的任何终端或命令提示符。您可以使用以下方法检查字符串中的内容:'Résumé'.unpack("C*") 检查原始字节,如果您处于 UTF-8 模式,您应该看到 [82, 195, 169, 115, 117, 109, 195, 169],如果处于 LATIN1 模式,您应该看到 [82, 233, 115, 117, 109, 233]
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2011-09-26
    • 2012-07-19
    相关资源
    最近更新 更多