【问题标题】:Batch convert to UTF8 using Ruby使用 Ruby 批量转换为 UTF8
【发布时间】:2011-05-19 16:33:11
【问题描述】:

我的文件编码遇到了一个小问题。 可悲的是,到目前为止,我仍然对编码很重要的所有事情都不太满意。虽然自从我开始使用 Ruby 1.9 以来我学到了很多东西。

我手头的问题:我有几个文件要处理,它们应该是 UTF-8 格式。但我不知道如何正确批量转换这些文件;例如在 Ruby 中,我打开文件,将字符串编码为 utf8 并将其保存在另一个地方。 不幸的是,它不是这样完成的——文件仍然是 ANSI。 至少我的 Notepad++ 是这么说的。 不过我觉得这很奇怪,因为字符串被明确编码为 UTF-8,我什至将 File.open 参数 :encoding 设置为 'UTF-8'。我的 shell 设置为 CP65001,我相信它也对应于 UTF-8。

有什么建议吗? 非常感谢!

/e: 更重要的是,在记事本++中,我可以像这样手动转换:

  • 选择一切,
  • 复制,
  • 将编码设置为 UTF-8(这里可以看到 \x-escape-sequences)
  • 从剪贴板粘贴所有内容

完成!转义字符消失,文件可以处理。

【问题讨论】:

    标签: ruby encoding utf-8


    【解决方案1】:

    不幸的是,它不是这样完成的 - 文件仍然是 ANSI 格式。至少我的 Notepad++ 是这么说的。

    UTF-8 被设计为 ASCII 的超集,这意味着大多数可打印的 ASCII 字符在 UTF-8 中是相同的。因此,除非您有“特殊”字符,否则无法区分 ASCII 和 UTF-8。这些特殊字符在 UTF-8 中使用多个字节表示。

    很可能您的转换确实有效,但您可以通过尝试使用特殊字符的程序来仔细检查。

    此外,在编码之间进行转换的最佳实用程序之一是iconv,它也是has ruby bindings

    【讨论】:

    • 我确实有特殊字符,例如 üß。我会研究一下iconv,在James Edward Gray II关于ruby编码的优秀文章中也提到过
    • 不过,Notepad++ 可能无法检测到编码。因此,如果在 ANSI/ASCII 模式下查看时将这些字符弄乱了,那么您的转换正在工作。
    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2011-10-02
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多