utf를 알고있는 coreutils?


16

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멀티 바이트 문자로 작업 한 경우


locale올바르게 설정 했습니까 ? locale(인수가없는) 명령 호출 의 읽기는 무엇입니까 ?
alex

로케일로 업데이트했습니다.
Chao Xu

자, cut명령 행의 예를 추가 할 수 있습니까?
alex

Ubuntu 10.04에서 echo ßßßß | cut -c 2--> �ßßß( LANG=en_US.UTF-8) 로이를 확인할 수 있습니다.
maxschlepzig

슬픈 것은 3 년 후에도 우분투 13.10에서도 여전히 그렇습니다.
Dr. Mike

답변:


13

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)}'

8
아무도 필요하지 않은 어리석은 해킹과 장난감 유틸리티를 추가하는 대신, 코어 유틸리티 관리자가 실제로 이와 같은 버그를 수정하는 것을 귀찮게하기 위해 버그 리포트를 제출하는 것이 좋습니다.
R .. GitHub STOP 돕는 얼음

3

의 빌드 / 버전에 버그가있는 것 같습니다 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가 패치 한 업스트림 버전의 버그라고 의견을 지적합니다 . 패치 를 적용하기 위해 직접 패치를하려는 경우 여기에서 패치를 찾을 수 있습니다 .


방금 소스를 보았는데 Fedora가 분명히 패치 한 업스트림 버그입니다. 업스트림 소스는 단순히 -c별칭을 만듭니다 -b.
Gilles 'SO- 악한 중지'

@Gilles : 흥미 롭습니다. 누군가가 스스로 그것을 시도하고 고치려고 할 경우에 대비하여 Fedora 패치에 링크했습니다.
패치

링크가 끊어졌습니다.
corvus_192
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.