【问题标题】:strange characters at beginning of file文件开头的奇怪字符
【发布时间】:2011-01-11 16:34:57
【问题描述】:

我正在编辑的文件开头有奇怪的字符(使用 textmate..) 我不知道它们何时出现,它们在 textmate 中是不可见的,但我读取文件的脚本变得疯狂..

这是文件中的前几个字符(如 od 命令所示):

0000000 177377 000120 000105 000117 000120 000114 000105 000072

我认为前两个不应该在那里..也许它们是由一些奇怪的保管箱同步引起的?或者别的什么......但它们往往会重新出现(我还不知道什么时候......)

我的问题:177377 是什么以及在我的 ruby​​ 脚本中删除它的简单方法? 谢谢

【问题讨论】:

    标签: ruby parsing unicode character-encoding ascii


    【解决方案1】:

    000000 177377(十六进制 0x0000FEFF)是 byte-order mark(BOM)。它向消费者表明文件的其余部分在big-endian UTF-32 encoding 中。在您的情况下,这可能不是正确,但这就是字节所表示的。

    如何处理它有点棘手。一般来说,BOM确实准确地表示了以下数据的编码。检测并跳过它并将后续内容视为在您的本地默认字符集中通常是错误的事情,即使它在这里似乎是正确的。相反,我会尝试弄清楚为什么您的编辑器插入了错误的 BOM,以及是否有办法禁用它。

    【讨论】:

    • 我认为您对它是 BOM 的看法是正确的,但我的(诚然生锈的)八进制翻译是 o177=x7F,而不是 xFE。
    • 查看 calc.50x.eu 并插入八进制 177377。(您不能将 6 个八进制数字分成两半得到 2 个十六进制数字——位数不起作用。)
    • btw Ruby 八进制文字只是带有前导零的数字,因此您可以使用 "%X" % 0177377 # => "FEFF" 进行验证
    • 我处理过从其他人的代码以及配置错误的编辑器继承的 BOM。他们可能会很痛苦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多