Saya mencoba mengonversi Tanda Kutipan Tunggal Kanan menjadi Apostrof menggunakan tr
.
tr "`echo -e '\xE2\x80\x99'`" "`echo -e '\x27'`" < a > b
diberikan file yang disandikan UTF-8 bernama a
yang berisi contoh ini:
We're not a different species
“All alone?” Jeth mentioned.
OS X menggunakan tr
BSD dan menghasilkan hasil yang bagus:
We're not a different species
“All alone?” Jeth mentioned.
Ubuntu menggunakan GNU tr
dan menghasilkan hasil buruk ini:
We'''re not a different species
''<9C>All alone?''<9D> Jeth mentioned.
Bagaimana saya bisa mencapai konversi ini di Ubuntu?
Jawaban yang Diterima:
Anda dapat mencoba beberapa alat lain, seperti sed
:
$ sed "s/’/'/g" <a
We're not a different species
“All alone?” Jeth mentioned.
Atau, karena kita melakukan terjemahan sederhana, gunakan y
perintah untuk sed
:
$ sed "y/’/'/" <a
We're not a different species
“All alone?” Jeth mentioned.
GNU tr
tidak bekerja mungkin karena:
Saat ini
tr
sepenuhnya hanya mendukung karakter byte tunggal.
Akhirnya akan mendukung karakter multibyte; ketika itu terjadi,-C
opsi akan menyebabkannya melengkapi set karakter, sedangkan-c
akan menyebabkannya melengkapi himpunan nilai. Perbedaan ini akan
penting hanya jika beberapa nilai bukan karakter, dan ini mungkin
hanya di lokal yang menggunakan penyandian multibyte bila masukan berisi
kesalahan penyandian.
Dan ’
adalah karakter multibyte:
$ echo -n \' | wc -c
1
$ echo -n ’ | wc -c
3