【发布时间】:2017-06-16 22:12:31
【问题描述】:
当在字符串 Ås(瑞典大写字母 Å)上使用 wc 时,当我期望 wordcount 1 时,我得到 wordcount 2。
数一下Å、sÅ这几个字就得了1,感觉是对的。
$ echo sÅ | wc
1 1 4
$ echo Å | wc
1 1 3
数Ås、sÅ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