【问题标题】:Understanding LC_ALL=C and its implications for standard English characters了解 LC_ALL=C 及其对标准英文字符的影响
【发布时间】:2018-09-17 20:37:49
【问题描述】:

请原谅我处理这个问题的笨拙方式,到目前为止,我在字符编码主题上学到的一切都是在过去几个小时内完成的,我知道我已经不在我的范围内了深度。这可能会在网站的其他地方得到回答,例如在我的链接问题中,但如果有,这些答案太密集,我无法准确理解其中的结论。

我经常需要grep通过超大文本文件(总计超过100GB)的文件夹。我已经阅读了有关如何使用LC_ALL=C can speedthis up considerably 的信息,但我想确保在我的搜索中使用won't compromise the accuracy

这些文件很旧,并且通过了许多不同的在线来源,因此很可能包含来自许多不同编码的混乱字符,包括 UTF-8。 (顺便说一句,单个文件是否可以包含来自多种编码的字符?)

我最关心的是:如果我想在我的数据中搜索给定的b,我可以期望数据中出现的每个字母b 都被编码为ASCII,还是可以相同字母也被编码为UTF-8?

或者换一种说法,ASCII 字符总是且排他地 ASCII 吗?如果即使是标准英文字符也可以编码为 UTF-8,并且使用 LC_ALL=C grep 会忽略所有 UTF-8 字符,那么这意味着我的搜索会错过不是 ASCII 格式的搜索词,这显然不会我想要的行为,并且将是采用LC_ALL=Cgrep 的一个相当大的障碍。

【问题讨论】:

  • “包含来自多个字符集的字符”:当然(由于字符集之间的重叠),但不是来自多个字符编码。作者只选择了一个,你必须知道它是哪一个。
  • 我的错,我确实在该段落中表示不同的字符编码,我现在已经编辑了它,但仍然感谢您为我回答这个问题。
  • ASCII 码是 UTF-8 的子集
  • 如果您正在搜索固定字符串,即不使用正则表达式,请尝试使用grep -ffgrep

标签: utf-8 character-encoding cygwin text-files ascii


【解决方案1】:

关于理解UTF-8 vs ASCII,下面的很好
http://kunststube.net/encoding/ https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

关于少量非 ASCII 字符的 UTF-8 文件的 grep 时间差异,使用 LC_ALL=C 或 LANG=C 与标准 LANG=en_US.UTF-8 或类似文件基本没有区别。

在 Cygwin 64 位上执行的测试,在 20GB 的文本上重复搜索 1000 次:

$ time for i in $(seq 1000) ; do  grep -q LAPTOP-82F08ILC wia-*.log ; done

real    0m53.289s
user    0m7.813s
sys     0m31.635s

$ time for i in $(seq 1000) ; do  LC_ALL=C grep -q LAPTOP-82F08ILC wia-*.log ; done

real    0m53.027s
user    0m7.497s
sys     0m31.010s
s

    $ ls -sh wia-*
     10G wia-1024.log  160M wia-16.log  2.5G wia-256.log   40M wia-4.log    639M wia-64.log
    1.3G wia-128.log    20M wia-2.log   320M wia-32.log   5.0G wia-512.log   80M wia-8.log

差异在两种情况下 53-55 秒内的重复容差范围内

【讨论】:

  • 很抱歉回复晚了,但要澄清一下,您是说在排序和匹配数据时在我的文件中使用 LC_ALL=C 可能会有风险吗?
  • 我只是说速度差异很小。您可以根据具体需要选择 LC_ALL 值。
猜你喜欢
  • 2011-12-29
  • 2019-09-27
  • 2015-08-09
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多