Unicode
支持 utf 的 coreutils?
今天用的時候
cut
,發現它並沒有把一個UTF-8字元當成一個字元,而是3個字元,因為它有3個字節長。對於許多工具來說,這似乎通常是正確的。
是否有
coreutils
支持 UTF-8 的版本?我的
locale
輸出:LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
這是什麼時候
cut
不起作用echo 哈哈 | cut -c 2- ��哈
正確的輸出應該是
哈
如果
cut -c
使用多字節字元。
GNU coreutils 通常理解 UTF-8。例如,在 UTF-8 語言環境中
echo 哈哈 | wc -m
正確輸出3
(注意選項是-m
,-c
由於歷史原因,它不是字節)。這是
cut
. 查看, on characters 的來源cut
cut
根本沒有實現:該-c
選項被視為-b
.一種解決方法是使用 awk。GNU awk 可以很好地處理 UTF-8。
awk '{print substr($0,2,length)}'
這看起來像是您的建構/版本中的錯誤
coreutils
。我可以在 Ubuntu 10.10 Maverick Meerkat 上重現這一點,但不能在 Fedora 15 上重現。[patches@holocene ~]$ cat /etc/fedora-release Fedora 15 版 (Lovelock) [更新檔@全新世 ~]$ rpm -q coreutils coreutils-8.10-2.fc15.x86_64 [patches@holocene ~]$ echo 哈哈| cut -c 2- 哈 [更新檔@全新世 ~]$ sudo chroot /mnt/maverick root@holocene:/# grep DISTRIB_DESC /etc/lsb-release DISTRIB_DESCRIPTION="Ubuntu 10.10" root@holocene:/# dpkg-query -s coreutils | grep 版本 版本:8.5-1ubuntu3 root@holocene:/# echo 哈哈| cut -c 2- ��哈
如果您也在使用 Ubuntu,則可以
coreutils
通過執行以下命令向 Ubuntu 打包程序報告錯誤:apport-bug coreutils
更新: Gilles 在評論中指出,這是
coreutils
Fedora 已修補的上游版本中的一個錯誤。 如果您想嘗試自己修補以使其正常工作,您可以在此處找到他們的更新檔。