Apa pun jenis data yang digunakan atau disimpan oleh komputer, data tersebut disimpan sebagai informasi biner. Gambar, teks, musik, video, dan lainnya disimpan sebagai data biner. Apakah data ada di perangkat penyimpanan atau dimuat ke dalam memori komputer, itu masih diwakili oleh nilai biner.
Jika data adalah teks, dan kami ingin menampilkan teks itu di layar, ada terjemahan yang harus terjadi untuk mengonversi nilai biner menjadi karakter. Untuk melakukan translasi, kita perlu mengetahui nilai mana yang digunakan untuk mewakili setiap karakter saat data dibuat. Perangkat lunak kemudian dapat bekerja mundur dan memetakan nilai numerik yang disimpan kembali ke karakter.
Karena kesuksesan bergantung pada mengetahui jenis pemetaan apa yang telah digunakan dan dengan ketat mematuhi aturan pemetaan selama pembuatan data dan penggunaan data, standar telah dibuat yang memformalkan pemetaan karakter seperti itu. Mereka mudah dipahami jika kita mendapatkan jargon langsung.
Karakter, Byte, dan Pemetaan
Karakter adalah huruf, angka, atau simbol lain yang dapat ditampilkan, seperti simbol tanda baca, tanda matematika seperti sama dengan “=” dan plus “+ ”, dan simbol mata uang. Hal yang Anda lihat di layar yang mewakili huruf itu disebut mesin terbang, dan kumpulan mesin terbang membentuk jenis huruf.
A jenis huruf adalah apa yang secara keliru disebut oleh banyak orang sebagai font. Sebenarnya, font adalah versi dari jenis huruf yang telah dimodifikasi, misalnya dengan menambah atau mengurangi ukurannya, atau mengubah bobotnya untuk membuat garis-garis mesin terbang lebih tebal atau lebih tipis. Terlepas dari jenis hurufnya, representasi numerik dari karakter tetap sama.
Semua karakter dalam satu pemetaan disebut himpunan karakter. Setiap karakter dalam satu set memiliki nilai numeriknya sendiri, tetap, unik, yang disebut titik kode. Jika karakter atau simbol tidak muncul di kumpulan karakter – artinya, tidak ada titik kode untuk itu – maka karakter atau simbol tersebut tidak dapat ditampilkan menggunakan kumpulan karakter tersebut. Pertimbangan penting adalah jumlah byte yang digunakan untuk mewakili satu karakter. Semakin banyak byte yang Anda gunakan per karakter, semakin banyak karakter yang dapat Anda sertakan dalam set.
Kakek dari semua set karakter byte tunggal adalah standar ASCII. Itu berasal dari akhir 1960-an ketika standar 7-bit ditetapkan yang mengkodekan 128 titik kode berbeda untuk digunakan oleh teleprinter. Sebaliknya, standar Unicode berisi total 1.114.112 poin kode. Ruang kode yang begitu besar diperlukan karena Unicode mencoba menyediakan dukungan pemetaan karakter untuk semua bahasa manusia. Menggunakan byte dalam jumlah tetap untuk menyimpan titik kode adalah pemborosan. Jika titik kode hanya membutuhkan satu byte untuk mengidentifikasinya, byte lain yang dicadangkan untuk titik kode tersebut akan mubazir. Kumpulan karakter dengan panjang variabel multibyte Unicode menggunakan sejumlah byte variabel untuk titik kode, dengan sebanyak empat byte diperlukan untuk mendeskripsikan titik kode yang rumit.
Jadi, titik kode mungkin harus menyandikan dua jenis data. Itu harus mengidentifikasi karakter yang diwakilinya, dan itu harus berisi metadata tentang dirinya sendiri, seperti jumlah byte di titik kode. Selain itu, beberapa karakter perlu digabungkan dengan karakter lain untuk mendapatkan mesin terbang akhir, sehingga titik kode juga perlu menyandikan informasi tersebut.
Keuntungan dari skema panjang variabel adalah Anda hanya menggunakan byte yang benar-benar Anda butuhkan. Ini efisien, dan menghasilkan file yang lebih kecil. Kerugiannya adalah, data lebih rumit untuk dibaca dan diurai. Dan mengubah dari satu set karakter ke yang lain bisa menjadi sangat sulit, sangat cepat.
Di situlah perintah iconv masuk. pengkodean karakter yang didukungnya. Ini mencantumkan lebih dari 1100 pengkodean yang berbeda, tetapi banyak yang merupakan alias untuk hal yang sama. Kami dapat membuat daftar semua pengkodean yang didukung menggunakan opsi -l (daftar). Jika Anda tidak menentukan nama file, iconv menggunakan STDIN dan STDOUT, mengambil inputnya dari baris perintah dan menulis outputnya ke jendela terminal. Anda dapat menyalurkan input ke iconv, dan Anda juga dapat mengarahkan outputnya ke file.
Kami akan menggunakan iconv dengan STDIN untuk mengilustrasikan beberapa poin. Kita perlu menentukan penyandian teks input, jadi kita akan menggunakan perintah lokal untuk menemukan apa itu.
locale
Baris pertama mengatakan kita menggunakan bahasa Inggris AS, dan penyandian Unicode UTF-8. String pengujian kami memiliki beberapa teks biasa, kata beraksen, karakter non-Inggris (karakter eszett Jerman, ß), dan simbol mata uang untuk Euro.
plain à beraksen non-Inggris ß Mata uang asing €
Kami akan mengonversi ini ke dalam ASCII. Kami menggunakan gema untuk menyalurkan teks input kami ke iconv. Kami menggunakan opsi -f (dari) untuk menentukan penyandian input adalah UTF-8, dan opsi -t (ke) untuk menunjukkan bahwa kami menginginkan output dalam US-ASCII.
eccho polos à beraksen non-Inggris ß Mata uang asing € | iconv -f UTF-8 -t US-ASCII
Itu gagal pada rintangan pertama. Tidak ada karakter yang setara di US-ASCII untuk “à”, sehingga konversi diabaikan. iconv menggunakan penghitungan zero-offset, jadi kami diberi tahu bahwa masalah terjadi di posisi enam. Jika kita menambahkan opsi -c (lanjutkan) iconv akan membuang karakter yang tidak dapat dikonversi dan melanjutkan memproses sisa input.
eccho polos beraksen non-Inggris ß Mata uang asing € | iconv -f UTF-8 -t US-ASCII
Perintah berjalan sampai selesai sekarang, tetapi ada karakter yang hilang dari output. Kita dapat membuat iconv untuk memberikan perkiraan karakter yang tidak dapat diubah dengan mengganti karakter yang serupa, atau representasi lainnya. Jika tidak bisa mengaturnya, itu menyisipkan tanda tanya “?” sehingga Anda dapat dengan mudah melihat karakter tidak dikonversi. Proses ini disebut transliterasi, dan untuk memanggilnya Anda menambahkan string “//TRANSLIT” ke pengkodean target. iconv -f UTF-8 -t US-ASCII//TRANSLIT
Sekarang kita telah mendapatkan teks keluaran lengkap, dengan “a” bukan “à” dan “ss” bukan “ß”, dan “EUR” bukan “€” currency symbol.
Menggunakan iconv With Files
Menggunakan iconv dengan files sangat mirip dengan menggunakannya pada baris perintah. Untuk mengetahui jenis pengkodean file sumber, kita dapat menggunakan perintah file.
file -i input.txt
File input kita dalam pengkodean UTF-16LE. Itu adalah pengkodean little-endian 16-bit. Tampilannya seperti ini:
less input.txt
Jika Anda menyipitkan mata dan membaca karakter berwarna putih, Anda dapat memilih string teks sebenarnya. Banyak perangkat lunak salah memperlakukan file seperti ini sebagai file biner, jadi kami akan mengonversinya menjadi UTF-8.
Kami menggunakan opsi -f (dari) untuk menentukan penyandian file input, dan – t (ke) opsi untuk memberi tahu iconv bahwa kami menginginkan output dalam UTF-8. Kita perlu menggunakan opsi -o (output) untuk menamai file output. Kami tidak menggunakan opsi untuk menamai file input—kami hanya memberi tahu iconv apa namanya.
iconv -f UTF-16LE -t UTF-8//TRANSLIT input.txt -o output.txt
File output kami terlihat seperti ini:
less output.txt
Anda mungkin tidak sering menggunakan iconv, tetapi saat Anda benar-benar membutuhkannya, ikon ini dapat menghemat bacon Anda.
Saya menerima banyak kiriman file dari orang yang menggunakan komputer Windows atau Mac, dan seringkali dari luar negeri. Mereka datang dalam segala macam pengkodean. Saya telah memberkati iconv lebih dari sekali karena dengan mudah mengizinkan saya bekerja dengan file-file itu di Linux.