[unix] utf를 알고있는 coreutils?

cut오늘 사용했을 때 UTF-8 문자를 문자로 취급하지 않고 3 바이트 길이이므로 3 문자로 취급한다는 것을 알았습니다.

이것은 많은 도구에서 일반적으로 적용되는 것 같습니다.

coreutilsUTF-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. 상기 찾고 소스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 ~] $ 고양이 / etc / fedora-release
페도라 릴리스 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 = "우분투 10.10"
root @ holocene : / # dpkg-query -s coreutils | grep 버전
버전 : 8.5-1 우분투 3
root @ holocene : / # echo 哈哈 | 컷 -c 2-
哈

Ubuntu를 사용 coreutils하는 경우 다음 명령을 실행하여 Ubuntu 패키지 관리자 에게 버그를보고 할 수 있습니다 .

apport-bug coreutils

업데이트 : Gilles coreutils는 Fedora가 패치 한 업스트림 버전의 버그라고 의견을 지적합니다 . 패치 를 적용하기 위해 직접 패치를하려는 경우 여기에서 패치를 찾을 수 있습니다 .


답변