【问题标题】:LANG and sed on OSXOSX 上的 LANG 和 sed
【发布时间】:2011-03-27 01:50:55
【问题描述】:

在最近的question 中指出,在 OSX 上,在非 ascii 文件上运行 sed 会产生奇怪的结果。例如,如果你这样做(/usr/bin/cal 是一个随机二进制文件)

sed 's/[^A-Z]//' /usr/bin/cal

sed 将删除除 A-Z 之外的所有可打印字符,但仍保留许多不可打印字符。但是,如果你这样做了

LANG='' sed 's/[^A-Z]//' /usr/bin/cal

仅输出 A-Z(和换行符)。为什么?

通常LANG=en-US.UTF-8这是怎么回事?无论如何,我看不到 sed 的输出在 UTF-8 中可以被认为是正确的。是坏了,还是有一些我不理解的工作概念?

我知道 OSX sed 符合 POSIX,因此与心爱的 GNU sed 不同。

【问题讨论】:

    标签: macos utf-8 sed


    【解决方案1】:

    二进制数据,例如 /usr/bin/cal 的内容,不是 UTF-8,因此会混淆任何读取它的代码,就好像它是。特别是,任何设置了高位(例如,>= 128)的字节都将被解释为表示单个字符的多字节序列的一部分,因此将从输出中省略。并非所有具有高位集的字节序列都是有效的 UTF-8,所以事情会变得相当混乱,但这可能解释了为什么一些不可打印的字符仍然存在,但(可能)没有其他字符。

    简而言之:如果您想对二进制数据使用面向文本的工具,请不要这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2014-02-11
      • 2014-10-27
      • 2016-12-13
      • 2014-08-08
      相关资源
      最近更新 更多