【问题标题】:MacOS wc (wordcount) counts wrong words with UTF-8 character ÅMacOS wc (wordcount) 用 UTF-8 字符计数错误的单词 Å
【发布时间】:2017-06-16 22:12:31
【问题描述】:

当在字符串 Ås(瑞典大写字母 Å)上使用 wc 时,当我期望 wordcount 1 时,我得到 wordcount 2。

数一下Å这几个字就得了1,感觉是对的。

$ echo sÅ | wc
       1       1       4
$ echo Å | wc
       1       1       3

ÅssÅs这两个词,得到2,感觉不正确。

$ echo sÅs | wc
       1       2       5
$ echo Ås | wc
       1       2       4

只有字母Å 可以重现这个,而不是åäöÄÖ

$ echo "Ås" | wc
       1       2       4
$ echo "Äs" | wc
       1       1       4
$ echo "Ös" | wc
       1       1       4

我在启动终端时使用 Mac OS 的默认区域设置,如下所示:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

我在 MacOS Sierra 和 Lion 上得到了相同的结果。

只是检查字符串 Ås 的样子。

$ echo "Ås" | hexdump
0000000 c3 85 73 0a                                    
0000004

那么,这是区域设置的问题吗?Mac OS 设置错误 - 至少关于命令 wc

这是 Mac OS 版本的 wc 中关于 UTF-8 字符 Å 的错误吗?

或者,当使用(默认值)wc -c 时,字符 85 被检测为 ASCII 表中省略号 的空白字符? (wc -m 不过提供了 wordcount 的预期答案)

或者我在这里遗漏了一些明显的东西?

【问题讨论】:

  • 我没有答案,但我可以在交互测试时确认相同的结果......并补充说,当我 SSH 到远程 FreeBSD 服务器时,我的复制和粘贴看起来像 @ 987654341@ ...只报告一个字。 (OS X/macOS 中的 wc 源自旧版本的 FreeBSD 的 wc。)但是 .. 如果我在 OS X 上测试 file,我会得到不同的结果。试试:echo "Ås" > test.txt; wc -w test.txt。我不知道为什么会这样。期待信息丰富的答案。
  • 啊,也偶然发现了瑞典字符的这个问题。一种解决方法是在使用 wc... echo -n "sÅÄÖs" | iconv -t latin1 -f utf8 | wc 产生 0 1 5 之前转换为 latin1

标签: macos utf-8 locale wc


【解决方案1】:

确实!这是区域设置的问题 - UTF_8 是一种可变长度编码方案。 直 latin1 字符(旧的 Ascii 字符)编码为 1 个字节,而重音瑞典字符为 2 个字节(或更多?),特别是带有环的 A。希望对你有帮助

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 2015-04-07
    • 2015-05-15
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多