coreutilsはutfをサポートしていますか?

coreutilsはutfをサポートしていますか?

今日使用するときは、cutUTF-8文字を1文字として扱うのではなく3バイト長なので、3文字を1文字として扱うことがわかりました。

これは通常多くのツールに当てはまります。

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マルチバイト文字を使用する場合。

答え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 ハハ|cut -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 haha​​|cut -c 2-
��

coreutilsUbuntuも使用している場合は、次のコマンドを実行してUbuntuパッケージャにエラーを報告できます。

apport-bug coreutils

修正する: GillesはコメントでこれがcoreutilsパッチされたFedoraのアップストリームバージョンのバグであると指摘しました。 ここでパッチを見つけることができます。直接パッチして動作させたい場合。

関連情報