Karakter unicode: apa yang harus diketahui setiap pengembang





Jika Anda menulis aplikasi internasional yang menggunakan banyak bahasa, maka Anda perlu mengetahui satu atau dua hal tentang pengkodean. Dia bertanggung jawab atas bagaimana teks ditampilkan di layar. Saya akan berbicara secara singkat tentang sejarah pengkodean dan standarisasi, dan kemudian kita akan berbicara tentang penggunaannya. Mari kita sedikit membahas teori informatika.



Pengantar encoding



Komputer hanya memahami bilangan biner - nol dan satu, ini adalah bahasa mereka. Tidak ada lagi. Satu angka disebut byte, setiap byte terdiri dari delapan bit. Artinya, delapan angka nol dan satu membentuk satu byte. Di dalam komputer, semuanya bermuara pada biner - bahasa pemrograman, gerakan mouse, penekanan tombol, dan semua kata di layar. Tetapi jika artikel yang Anda baca dulunya adalah kumpulan angka nol dan satu, lalu bagaimana bilangan biner menjadi teks? Mari kita cari tahu.



Sejarah singkat pengkodean



Pada awal perkembangannya, Internet hanya menggunakan bahasa Inggris. Penulis dan penggunanya tidak perlu khawatir tentang karakter bahasa lain, dan semua kebutuhan sepenuhnya tercakup oleh pengkodean American Standard Code for Information Interchange (ASCII).



ASCII adalah tabel untuk memetakan simbol biner menjadi karakter alfabet. Ketika komputer menerima entri seperti ini:



01001000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100

      
      





kemudian menggunakan ASCII itu mengubahnya menjadi frase "Halo dunia".



Satu byte (delapan bit) cukup besar untuk memuat huruf berbahasa Inggris, serta karakter kontrol, beberapa di antaranya digunakan oleh teleprinter, jadi pada tahun-tahun itu berguna (sekarang tidak lagi berguna). Karakter kontrol, misalnya, 7 (0111 dalam biner), yang menyebabkan komputer memancarkan sinyal; 8 (1000 dalam biner) - menampilkan karakter cetak terakhir; atau 12 (1100 dalam biner) - menghapus semua teks yang tertulis di terminal video.



Pada masa itu, komputer menghitung 8 bit per byte (tidak selalu demikian), jadi tidak ada masalah. Kita bisa menyimpan semua karakter kontrol, semua angka dan huruf Inggris, bahkan masih ada ruang, karena satu byte bisa mengkodekan 255 karakter, dan ASCII hanya membutuhkan 127. Artinya, masih ada 128 posisi dalam pengkodean yang tidak terpakai.



Seperti inilah tabel ASCII. Bilangan biner menyandikan semua huruf besar dan kecil dari A hingga Z dan angka dari 0 hingga 9. 32 posisi pertama disediakan untuk karakter kontrol yang tidak dapat dicetak.





Masalah ASCII



Posisi 128 sampai 255 kosong. Publik bertanya-tanya bagaimana cara mengisinya. Tapi mereka semua punya ide yang berbeda . American National Standards Institute (ANSI) merumuskan standar untuk industri yang berbeda. Mereka menyetujui posisi ASCII dari 0 hingga 127. Tidak ada yang mempermasalahkan mereka. Masalahnya ada pada posisi lainnya.



Inilah yang mengisi posisi 128-255 di komputer IBM pertama:





Beberapa coretan, ikon latar belakang, operator matematika, dan simbol beraksen seperti é. Namun para pengembang arsitektur komputer lain tidak mendukung inisiatif tersebut. Setiap orang ingin menerapkan pengkodean mereka sendiri di paruh kedua ASCII.



Semua akhiran yang berbeda ini disebut halaman kode .



Apa itu halaman kode ASCII?



Berikut adalah koleksi lebih dari 465 halaman kode yang berbeda! Ada halaman yang berbeda bahkan dalam bahasa yang sama, misalnya, untuk bahasa Yunani dan Cina. Bagaimana kekacauan ini bisa distandarisasi? Atau setidaknya membuatnya berfungsi di antara bahasa yang berbeda? Atau di antara halaman kode yang berbeda untuk bahasa yang sama? Dalam bahasa selain bahasa Inggris? Orang Cina memiliki lebih dari 100.000 karakter. ASCII bahkan tidak dapat menampung semuanya, bahkan jika mereka memutuskan untuk memberikan semua posisi kosong untuk karakter Cina.



Masalah ini bahkan disebut Mojibake (bnop, krakozyabry). Inilah yang mereka katakan tentang teks terdistorsi, yang diperoleh saat menggunakan pengkodean yang salah. Diterjemahkan dari bahasa Jepang, mojibake berarti "konversi karakter".





Contoh bnopni (krakozyabrov).



Semacam kegilaan ...



Persis! Tidak ada peluang untuk mengonversi data secara andal. Internet hanyalah koneksi komputer yang mengerikan di seluruh dunia. Bayangkan bahwa semua negara memutuskan untuk menggunakan standar mereka sendiri. Misalnya, komputer Yunani hanya menerima bahasa Yunani, sedangkan komputer Inggris hanya mengirim bahasa Inggris. Ini seperti berteriak di gua kosong, tidak ada yang bisa mendengarmu.



ASCII tidak lagi memadai untuk seumur hidup. Untuk Internet di seluruh dunia, sesuatu yang berbeda harus dibuat, atau akan ada ratusan halaman kode yang harus ditangani. Kecuali Anda tidak ingin untuk membaca paragraf tersebut.



֎֏ 0590 ֐ ׀ׁׂ׃ׅׄ׆ׇ



Beginilah cara Unicode lahir



Unicode adalah singkatan dari Universal Coded Character Set (UCS) dan memiliki sebutan resmi ISO / IEC 10646. Tetapi biasanya semua orang menggunakan nama Unicode.



Standar ini membantu memecahkan masalah yang disebabkan oleh encoding dan halaman kode. Ini berisi banyak titik kode ( titik kode) yang ditetapkan untuk karakter dari bahasa dan budaya di seluruh dunia. Artinya, Unicode adalah sekumpulan karakter . Ini dapat digunakan untuk mengasosiasikan beberapa abstraksi dengan surat yang ingin kita rujuk. Dan ini dilakukan untuk setiap simbol, bahkan hieroglif Mesir .



Seseorang telah melakukan pekerjaan yang bagus dengan mencocokkan setiap karakter dalam semua bahasa dengan kode-kode unik. Beginilah tampilannya:



«Hello World»

U+0048 :   H
U+0065 :   E
U+006C :   L
U+006C :   L
U+006F :   O
U+0020 : 
U+0057 :   W
U+006F :   O
U+0072 :   R
U+006C :   L
U+0064 :   D
      
      





Awalan U + menunjukkan bahwa ini adalah standar Unicode dan angka tersebut adalah konversi biner. Standar ini menggunakan notasi heksadesimal, yang merupakan representasi bilangan biner yang disederhanakan. Di sini Anda dapat memasukkan apa saja di bidang dan melihat bagaimana itu diubah menjadi Unicode. Dan di sini Anda dapat mengagumi 143.859 poin kode.



Saya akan mengklarifikasi untuk berjaga-jaga: kita berbicara tentang kamus besar poin kode yang ditugaskan ke semua jenis simbol. Ini adalah kumpulan simbol yang sangat besar, tidak lebih.



Tetap menambahkan bahan terakhir.



Unicode Transform Protocol (UTF)



UTF adalah protokol untuk menyandikan titik kode di Unicode. Ini dijabarkan dalam standar dan memungkinkan Anda untuk menyandikan titik kode apa pun. Namun, ada berbagai jenis UTF. Mereka berbeda dalam jumlah byte yang digunakan untuk menyandikan satu item. UTF-8 menggunakan satu byte per titik, UTF-16 menggunakan dua byte, dan UTF-32 menggunakan empat byte.



Tetapi jika kita memiliki tiga pengkodean yang berbeda, bagaimana kita tahu mana yang digunakan dalam file tertentu? Untuk ini, sebuah Byte Order Mark (BOM) digunakan, yang juga disebut Encoding Signature. BOM adalah penanda dua byte di awal file yang memberi tahu Anda pengkodean mana yang digunakan di sini.



Di Internet, UTF-8 adalah yang paling umum digunakan , ini juga ditulis seperti yang disukai dalam standar HTML5, jadi saya akan memberikan perhatian terbesar.





Ini grafik yang dibangun pada tahun 2012, UTF-8 itu menjadi pengkodean dominan. Dan itu masih.





Grafik menunjukkan prevalensi UTF-8.



Apa itu UTF-8 dan bagaimana cara kerjanya?



UTF-8 mengkodekan dalam satu byte setiap titik kode Unicode 0 hingga 127 (seperti dalam ASCII). Artinya, jika Anda menulis program menggunakan ASCII, dan pengguna Anda menggunakan UTF-8, mereka tidak akan melihat sesuatu yang luar biasa. Semuanya akan berfungsi sebagaimana mestinya. Perhatikan betapa pentingnya hal ini. Kami perlu menjaga kompatibilitas ke belakang dengan ASCII selama adopsi massal UTF-8. Dan pengkodean ini tidak merusak apa pun.



Seperti namanya, code point terdiri dari 8 bit (satu byte). Ada karakter di Unicode yang membutuhkan beberapa byte (hingga 6). Ini disebut panjang variabel. Dalam bahasa yang berbeda, jumlah byte tertentu berbeda. Dalam bahasa Inggris - 1, bahasa Eropa (dengan alfabet Latin), Ibrani dan Arabdiwakili oleh dua byte per titik kode. Untuk bahasa Cina, Jepang, Korea, dan bahasa Asia lainnya , tiga byte digunakan.



Jika Anda memerlukan karakter untuk menempati lebih dari satu byte, maka pola bit digunakan untuk menunjukkan transisi - itu berarti karakter berlanjut dalam beberapa byte berikutnya.



Dan sekarang kami, seolah-olah secara ajaib, mencapai kesepakatan tentang cara menyandikan paku Sumeria (Habr tidak menampilkannya), serta ikon emoji !



Untuk meringkas, pertama-tama kita membaca BOM untuk menentukan versi pengkodean, kemudian mengonversi file ke titik kode Unicode, dan kemudian menampilkan karakter dari kumpulan Unicode.



Terakhir tentang UTF



Kode adalah kunci . Jika saya memposting pengkodean yang salah, Anda tidak akan dapat membaca apa pun. Ingatlah ini saat mengirim dan menerima data. Dalam alat sehari-hari kami, ini sering kali diabstraksi, tetapi bagi kami programmer, penting untuk memahami apa yang terjadi di balik terpal.



Bagaimana cara kami menyetel pengkodean? Karena HTML ditulis dalam bahasa Inggris dan hampir semua pengkodean berfungsi baik dengan bahasa Inggris, kita dapat menentukan pengkodean di awal bagian <had>



.



<html lang="en">
<head>
  <meta charset="utf-8">
</head>

      
      





Hal ini penting untuk dilakukan di awal <had>



, karena penguraian HTML dapat dimulai kembali jika encoding yang salah sedang digunakan. Anda juga dapat mengetahui versi encoding dari header Content-Type pada permintaan / respons HTTP.



Jika dokumen HTML tidak menyebutkan encoding, spesifikasi HTML5 menawarkan solusi menarik seperti BOM sniffing . Dengan bantuannya, kita dapat menentukan pengkodean yang digunakan oleh byte order marker (BOM).



Semuanya?



Unicode belum selesai. Seperti halnya dengan standar apa pun, kami menambahkan sesuatu, menghapus sesuatu, menawarkan sesuatu yang baru. Tidak ada spesifikasi yang “lengkap”. Biasanya ada 1-2 rilis dalam setahun, Anda dapat menemukan deskripsinya di sini .



Baru-baru ini saya membaca tentang bug yang sangat menarik terkait dengan tampilan karakter Unicode Rusia yang salah di Twitter .



Jika Anda telah membaca sampai akhir, maka Anda hebat. Saya menyarankan Anda melakukan pekerjaan rumah Anda. Lihat bagaimana situs dapat rusak saat menggunakan pengkodean yang salah. Saya memanfaatkan iniekstensi untuk Google Chrome, mengubah pengkodean dan mencoba membuka halaman yang berbeda. Informasinya sama sekali tidak terbaca. Coba sendiri, seperti apa tunggulnya. Ini akan membantu Anda memahami betapa pentingnya pengkodean.





Kesimpulan



Saat menulis artikel ini, saya mengetahui tentang Michael Everson . Sejak 1993, dia telah mengusulkan lebih dari 200 perubahan pada Unicode, menambahkan ribuan karakter ke standar. Pada tahun 2003, dia dianggap anggota paling produktif. Dia sendiri yang sangat memengaruhi wajah Unicode. Michael adalah salah satu orang yang membuat Internet seperti yang kita kenal sekarang. Sangat mengesankan.



Saya harap saya dapat menunjukkan kepada Anda untuk apa pengkodean itu, masalah apa yang mereka pecahkan, dan apa yang terjadi jika gagal.



All Articles