utf farkında olan coreutils?


16

cutBugün kullandığımda , UTF-8 karakterine karakter olarak değil, 3 karakter uzunluğunda olduğu için 3 karakter kullandığını öğrendim.

Bu genellikle birçok araç için geçerli gibi görünüyor.

coreutilsUTF-8'in farkında olan sürümleri var mı?

Benim localeçıkışı:

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=

İşte ne zaman cutçalışmıyor

echo 哈哈 | cut -c 2-
��哈

Doğru çıktı

çok cut -cbaytlı karakterlerle çalıştıysa.


localeUygun şekilde ayarladın mı? localeKomut çağırma (w / o argümanları) komutunun okunması nedir ?
alex

Yerel ayarlarla güncelledim.
Chao Xu

Tamam, cutkomut satırınıza bazı örnekler de ekleyebilir misiniz ?
alex

Bunu Ubuntu echo ßßßß | cut -c 2-�ßßßLANG=en_US.UTF-8
10.04'te

Üzücü olan şu ki, 3 yıl sonra bu Ubuntu 13.10'da hala geçerli ...
Dr. Mike

Yanıtlar:


13

GNU coreutils genel olarak UTF-8'i anlar. Örneğin , UTF-8 yerel ayarında echo 哈哈 | wc -mdoğru çıktılar 3(seçeneğin, tarihsel nedenlerden dolayı bayt anlamına -mgelmediğini unutmayın -c).

Bu bir hatadır cut. Baktığımızda kaynağıcut , cutkarakterler sadece uygulanmadı: -cseçeneği ile eşanlamlı olarak ele alınır -b.

Geçici çözüm awk kullanmaktır. GNU awk UTF-8 ile iyi başa çıkıyor.

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

8
Kimsenin ihtiyaç duymadığı aptal hackler ve oyuncak yardımcı programları eklemek yerine, coreutils bakım görevlilerini bu tür hataları gerçekten düzeltmek için rahatsız etmek için bir hata raporu (yinelenen olsa bile) dosyalamaya değer ...
R .. GitHub STOP BUZA YARDIM

3

Bu, derlemenizde / sürümünüzde bir hataya benziyor coreutils . Bunu Ubuntu 10.10 Maverick Meerkat üzerinde çoğaltabilirim ancak Fedora 15'te çoğaltamam.

[yamalar @ holocene ~] $ cat / etc / fedora-release 
Fedora sürüm 15 (Lovelock)
[yamalar @ holocene ~] $ rpm -q coreutils
coreutils-8.10-2.fc15.x86_64
[yamalar @ holocene ~] $ echo 哈哈 | kes -c 2-
哈
[yamalar @ 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 Sürümü
Sürüm: 8.5-1ubuntu3
kök @ holocene: / # echo 哈哈 | kes -c 2-
哈

Ayrıca Ubuntu kullanıyorsanız, Ubuntu'ya bir hata bildirebilirsiniz coreutils , aşağıdaki komutu çalıştırarak paketleyicilerine :

apport-bug coreutils

Güncelleme: Gilles, yorumlarda coreutilsbunun Fedora'nın yama yaptığı yukarı akış sürümünde bir hata olduğunu belirtiyor. Çalıştırmak için kendiniz yama eklemek istiyorsanız , yamalarını burada bulabilirsiniz .


Sadece kaynağa baktım ve görünüşe göre Fedora'nın yamalı olduğu bir yukarı akış hatası. Akış yukarı kaynak basitçe -cbir takma ad oluşturur -b.
Gilles 'SO- kötü olmayı bırak

@Gilles: İlginç. Birisi kendim düzeltmeye çalışmak istemesi durumunda cevabımda Fedora'nın yamasıyla bağlantı kurdum.
Yamalar

Bağlantı koptu.
corvus_192
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.