Di tempat kerja sepertinya tidak ada minggu yang berlalu tanpa beberapa konipsi terkait pengkodean, bencana, atau malapetaka. Masalahnya biasanya berasal dari programmer yang mengira mereka dapat memproses file "teks" dengan andal tanpa menentukan encodingnya. Tapi Anda tidak bisa.
Jadi diputuskan untuk sejak saat itu melarang file memiliki nama yang berakhiran *.txt
atau *.text
. Pemikirannya adalah bahwa ekstensi tersebut menyesatkan programmer kasual menjadi kepuasan yang tumpul tentang pengkodean, dan ini mengarah pada penanganan yang tidak tepat. Hampir lebih baik tidak memiliki ekstensi sama sekali, karena setidaknya Anda tahu bahwa Anda tidak tahu apa yang Anda miliki.
Namun, kami tidak akan pergi sejauh itu. Sebagai gantinya, Anda diharapkan menggunakan nama file yang diakhiri dengan encoding. Jadi untuk file teks, misalnya, ini akan menjadi sesuatu seperti README.ascii
, README.latin1
, README.utf8
, dll
Untuk file yang membutuhkan ekstensi tertentu, jika seseorang dapat menentukan pengkodean di dalam file itu sendiri, seperti di Perl atau Python, maka Anda harus melakukannya. Untuk file seperti sumber Java yang tidak memiliki fasilitas internal untuk file tersebut, Anda harus meletakkan pengkodean sebelum ekstensi, seperti SomeClass-utf8.java
.
Untuk keluaran, UTF-8 sangat disukai.
Tetapi sebagai masukan, kita perlu mencari cara untuk menangani ribuan file dalam basis kode kita yang diberi nama *.txt
. Kami ingin mengubah nama semuanya agar sesuai dengan standar baru kami. Tapi kita tidak mungkin melihat semuanya. Jadi kita membutuhkan perpustakaan atau program yang benar-benar berfungsi.
Ini beragam dalam ASCII, ISO-8859-1, UTF-8, Microsoft CP1252, atau Apple MacRoman. Meskipun kami tahu kami dapat mengetahui apakah sesuatu itu ASCII, dan kami memiliki perubahan yang baik dalam mengetahui apakah sesuatu mungkin UTF-8, kami bingung tentang pengkodean 8-bit. Karena kami berjalan di lingkungan Unix campuran (Solaris, Linux, Darwin) dengan sebagian besar desktop adalah Mac, kami memiliki beberapa file MacRoman yang mengganggu. Dan ini khususnya merupakan masalah.
Untuk beberapa waktu sekarang saya telah mencari cara untuk menentukan secara terprogram dari
- ASCII
- ISO-8859-1
- CP1252
- MacRoman
- UTF-8
ada file di dalamnya, dan saya belum menemukan program atau pustaka yang dapat diandalkan untuk membedakan antara ketiga penyandiaksaraan 8-bit yang berbeda. Kami mungkin memiliki lebih dari seribu file MacRoman saja, jadi detektor charset apa pun yang kami gunakan harus dapat mengendusnya. Tidak ada yang bisa saya lihat yang bisa mengatur triknya. Saya memiliki harapan besar untuk perpustakaan detektor charset ICU , tetapi tidak dapat menangani MacRoman. Saya juga telah melihat modul untuk melakukan hal yang sama di Perl dan Python, tetapi lagi dan lagi ceritanya selalu sama: tidak ada dukungan untuk mendeteksi MacRoman.
Oleh karena itu, yang saya cari adalah pustaka atau program yang ada yang andal menentukan mana dari lima penyandiaksaraan file itu — dan sebaiknya lebih dari itu. Secara khusus itu harus membedakan antara tiga pengkodean 3-bit yang telah saya kutip, terutama MacRoman . File-file tersebut lebih dari 99% teks bahasa Inggris; ada beberapa dalam bahasa lain, tetapi tidak banyak.
Jika itu adalah kode pustaka, preferensi bahasa kami adalah Perl, C, Java, atau Python, dan dalam urutan itu. Jika ini hanya sebuah program, maka kami tidak terlalu peduli dengan bahasanya asalkan datang dalam sumber penuh, berjalan di Unix, dan sepenuhnya tidak terbebani.
Apakah ada orang lain yang memiliki masalah jutaan file teks lama yang dikodekan secara acak? Jika ya, bagaimana Anda mencoba mengatasinya, dan seberapa sukses Anda? Ini adalah aspek terpenting dari pertanyaan saya, tetapi saya juga tertarik pada apakah menurut Anda mendorong pemrogram untuk memberi nama (atau mengganti nama) file mereka dengan penyandian sebenarnya untuk file tersebut akan membantu kami menghindari masalah di masa mendatang. Adakah yang pernah mencoba untuk menegakkan ini secara kelembagaan, dan jika ya, apakah itu berhasil atau tidak, dan mengapa?
Dan ya, saya sangat memahami mengapa seseorang tidak dapat menjamin jawaban yang pasti mengingat sifat masalahnya. Ini terutama terjadi pada file kecil, di mana Anda tidak memiliki cukup data untuk melanjutkan. Untungnya, file kami jarang berukuran kecil. Selain README
file acak , sebagian besar berukuran antara 50k hingga 250k, dan banyak yang lebih besar. Apa pun yang berukuran lebih dari beberapa K dijamin akan menggunakan bahasa Inggris.
Domain masalahnya adalah penambangan teks biomedis, jadi terkadang kita berurusan dengan korpora yang luas dan sangat besar, seperti semua penyimpanan Akses Terbuka PubMedCentral. File yang agak besar adalah BioThesaurus 6.0, dengan ukuran 5,7 gigabyte. File ini sangat mengganggu karena hampir semuanya UTF-8. Namun, beberapa numbskull pergi dan terjebak beberapa baris di dalamnya yang ada dalam beberapa pengkodean 8-bit — Microsoft CP1252, saya yakin. Butuh waktu cukup lama sebelum Anda melakukan perjalanan yang satu itu. :(