coreutils 是否支持 utf ?

coreutils 是否支持 utf ?

今天使用时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使用多字节字符。

答案1

GNU coreutils 一般来说理解 UTF-8。例如,以 UTF-8 语言环境echo 哈哈 | wc -m正确输出(请注意,该选项是,而不是由于历史原因意味着字节)。3-m-c

这是 中的一个错误cut。看着来源cut, cuton 字符根本没有实现:该-c选项被视为 的同义词-b

解决方法是使用 awk。 GNU awk 可以很好地处理 UTF-8。

awk '{print substr($0,2,length)}'

答案2

这看起来像是您的构建/版本中的错误coreutils。我可以在 Ubuntu 10.10 Maverick Meerkat 上重现此内容,但不能在 Fedora 15 上重现。

[patches@holocene ~]$ cat /etc/fedora-release
Fedora 版本 15 (Lovelock)
[patches@holocene ~]$ rpm -q coreutils
coreutils-8.10-2.fc15.x86_64
[patches@holocene ~]$ echo 哈哈 |切-c 2-
[patches@holocene ~]$ sudo chroot /mnt/maverick
root@holocene:/# grep DISTRIB_DESC /etc/lsb-release
DISTRIB_DESCRIPTION="Ubuntu 10.10"
root@holocene:/# dpkg-query -s coreutils |版本号
版本:8.5-1ubuntu3
root@holocene:/# echo 哈哈 |切-c 2-
��哈

coreutils如果您也使用 Ubuntu,则可以通过运行以下命令向 Ubuntu 打包程序报告错误:

apport-bug coreutils

更新: Gilles 在评论中指出,这是coreutilsFedora 已修补的上游版本中的一个错误。 你可以在这里找到他们的补丁如果您想尝试自己修补它以使其正常工作。

相关内容