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(引数なし)コマンド呼び出しの読み取りは何ですか?
アレックス

ロケールを更新しました。
チャオシュー

OK、cutコマンドラインの例を追加できますか?
アレックス

echo ßßßß | cut -c 2--> �ßßßLANG=en_US.UTF-8
maxschlepzig

悲しいことは、3年後、これは... Ubuntuの13.10で、まだ真である、ということである
博士マイク・

回答:


13

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

8
それは価値がある。このような実際にはバグ修正にcoreutilsのメンテナを困らせるために(それが重複されて終わる場合でも)バグレポートを提出するだけではなく、愚かなハックやおもちゃのユーティリティを追加することであろうと誰もが必要...
R .. GitHubのSTOP ICEの

3

これはのビルド/バージョンのバグのように見えます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 | grepバージョン
バージョン:8.5-1ubuntu3
root @ holocene:/#echo哈哈| カット-c 2-
哈

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

apport-bug coreutils

更新: Gillesは、これはcoreutilsFedoraがパッチを適用したアップストリームバージョンのバグであるというコメントで指摘しています。 自分でパッチを適用して動作させる場合は、ここでパッチを見つけることができます


ソースを見たところ、Fedoraがパッチを当てたように見えるアップストリームのバグです。アップストリームソースは-c、単にのエイリアスを作成し-bます。
ジル 'SO-悪である停止

@Gilles:興味深い。誰かが自分でそれを試して修正したい場合に備えて、私は答えでFedoraのパッチにリンクしました。
パッチ

リンクが壊れています。
corvus_192
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.