Jika invasi alien terjadi dan kami dipaksa untuk mendukung bahasa mereka di semua sistem komputer kami yang ada, apakah UTF-8 dirancang sedemikian rupa untuk memungkinkan sejumlah besar karakter mereka?
(Tentu saja, kita tidak tahu apakah alien benar-benar memiliki bahasa, jika atau bagaimana mereka berkomunikasi, tetapi demi argumen, tolong bayangkan mereka melakukannya.)
Misalnya, jika bahasa mereka terdiri dari jutaan mesin terbang yang baru ditemukan, simbol, dan / atau menggabungkan karakter , dapatkah UTF-8 secara teoritis diperluas dengan cara yang tidak melanggar untuk memasukkan mesin terbang baru ini dan masih mendukung semua perangkat lunak yang ada?
Saya lebih tertarik jika mesin terbang jauh melampaui batasan ukuran saat ini dan membutuhkan lebih banyak byte untuk mewakili mesin terbang tunggal. Jika UTF-8 tidak dapat diperluas, apakah itu membuktikan bahwa keunggulan tunggal dibandingkan UTF-32 hanyalah ukuran karakter yang lebih rendah?
Jawaban:
Standar Unicode memiliki banyak ruang kosong. Codepoints Unicode diatur dalam "pesawat" dan "blok". Dari 17 total pesawat, ada 11 yang saat ini tidak ditugaskan . Setiap pesawat memiliki 65.536 karakter, jadi ada setengah juta codepoint realistis untuk cadangan untuk bahasa asing (kecuali kita mengisi semua itu dengan lebih banyak emoji sebelum kontak pertama). Pada Unicode 8.0, hanya 120.737 poin kode telah ditetapkan secara total (kira-kira 10% dari total kapasitas), dengan jumlah yang kira-kira sama belum ditetapkan tetapi dicadangkan untuk penggunaan pribadi, khusus aplikasi. Secara total, 974.530 codepoint tidak ditugaskan.
UTF-8 adalah pengkodean khusus Unicode, dan saat ini terbatas pada empat oktet (byte) per titik kode, yang cocok dengan batasan UTF-16. Secara khusus, UTF-16 hanya mendukung 17 pesawat. Sebelumnya, UTF-8 mendukung 6 oktet per codepoint, dan dirancang untuk mendukung 32768 pesawat. Pada prinsipnya batas 4 byte ini dapat diangkat, tetapi itu akan memecah struktur organisasi Unicode saat ini, dan akan mengharuskan UTF-16 dihapus secara bertahap - tidak mungkin terjadi dalam waktu dekat mengingat betapa mengakarnya dalam sistem operasi dan pemrograman tertentu bahasa.
Satu-satunya alasan UTF-16 masih umum digunakan adalah bahwa itu merupakan perluasan ke pengkodean UCS-2 yang cacat yang hanya mendukung satu pesawat Unicode. Selain itu mewarisi sifat-sifat yang tidak diinginkan baik dari UTF-8 (tidak lebar tetap) dan UTF-32 (tidak kompatibel ASCII, pemborosan ruang untuk data umum), dan memerlukan tanda urutan byte untuk menyatakan endianness. Mengingat bahwa meskipun ada masalah-masalah ini UTF-16 masih populer, saya tidak terlalu optimis bahwa ini akan segera berubah dengan sendirinya. Mudah-mudahan, Alien Overlords kami yang baru akan melihat halangan ini untuk aturan mereka, dan dalam kebijaksanaan mereka mengusir UTF-16 dari muka bumi .
sumber
wfopen
syscall atau apa pun, itu UTF8 sepanjang jalan. Neraka bahkan Python dan Java - keduanya yang mendefinisikan string sebagai UTF-16 karena alasan historis - jangan menyimpan string sebagai UTF-16 kecuali bila perlu .. manfaat memori yang besar dan tidak ada performa yang dicapai (dan meskipun ada kode tambahan untuk menangani konversi - memori mahal, CPU murah). Hal yang sama berlaku untuk Android - JString NDK adalah UTF8, sebagian besar karena insinyur Google tidak gila.Jika UTF-8 sebenarnya diperpanjang, kita harus melihat maksimum absolut yang bisa diwakilinya. UTF-8 disusun seperti ini:
(tanpa malu-malu disalin dari RFC .) Kita melihat bahwa byte pertama selalu mengontrol berapa banyak byte tindak lanjut yang membentuk karakter saat ini.
Jika kami memperluasnya hingga 8 byte, kami mendapatkan representasi non-Unicode tambahan
Menghitung representasi maksimum yang memungkinkan teknik ini memungkinkan kita
atau di basis 10:
yang memberi kami jumlah maksimum representasi sebagai 4.468.982.745.216.
Jadi, jika 4 miliar ( atau triliun, sesuka Anda ) karakter ini cukup untuk mewakili bahasa asing, saya cukup positif bahwa kami dapat, dengan upaya minimal, memperpanjang UTF-8 saat ini untuk menyenangkan penguasa asing baru kami ;-)
sumber
111111xx
byte pertama yang mungkin diikuti oleh lima ekstensi byte untuk maksimum 2³² poin kode. Tapi itu hanya kompatibel dengan definisi yang Anda sebutkan untuk 2³¹ poin kode pertama.F4 8F BF BF
dalam byte UTF-8). Jadi, semua yang saya sebutkan di sini adalah spekulasi murni. Tentu saja, seseorang dapat memikirkan ekstensi lain, di mana byte pertama yang tinggi menandakan beberapa struktur berikut (dan mudah-mudahan tidak merusak sinkronisasi diri dalam proses). Saya mencoba untuk menyelesaikan skema byte menjadi sedekat mungkin dengan UTF-8, mungkin.FF
memperkenalkan unit kode 13-byte yang mampu menyimpan 72 bit. Lebih dari 2 ^ 36 secara seragam sangat mahal, tetapi ini memungkinkan encoding int 64-bit dan kemudian beberapa.RFC3629 membatasi UTF-8 hingga maksimum empat byte per karakter, dengan nilai maksimum 0x10FFFF, memungkinkan maksimum 1.112.064 poin kode. Jelas pembatasan ini dapat dihapus dan standar diperpanjang, tetapi ini akan membuktikan perubahan melanggar untuk kode yang ada yang berfungsi untuk batas itu.
Dari sudut pandang file data, ini tidak akan menjadi perubahan yang melanggar karena standar bekerja atas dasar bahwa jika bit paling signifikan (MSB) dari setiap byte diatur, maka byte berikutnya adalah bagian dari pengkodean. Bahkan sebelum RFC3629, standar dibatasi hingga 31 bit, meninggalkan MSB dari byte keempat tidak disetel.
Memperluas standar melampaui 0x10FFFF akan merusak kompatibilitas data sebagian UTF-8 dengan UTF-16.
sumber
Sungguh, hanya 2 kode-kode Unicode yang mewakili banyak mesin terbang, jika mereka menggabungkan karakter.
Bandingkan, misalnya, dua cara yang dikodekan Unicode untuk alfabet Hangul Korea: Suku kata Hangul dan Hangul Jamo . Karakter 웃 in
Hangul Syllabels
adalah titik kode tunggalC6C3
sedangkan diHangul Jamo
dalamnya adalah tiga titik kode110B
(ㅇ)116E
(ㅜ)11B9
(ㅅ). Jelas, menggunakan kombinasi karakter membutuhkan jauh lebih sedikit titik kode, tetapi kurang efisien untuk menulis karena lebih banyak byte diperlukan untuk menulis setiap karakter.Dengan trik ini, tidak perlu melampaui jumlah poin kode yang saat ini dapat dikodekan dalam UTF-8 atau UTF-16.
Saya kira turun ke seberapa tersinggung para alien akan jika bahasa mereka kebetulan membutuhkan lebih banyak byte per pesan daripada bahasa duniawi. Jika mereka tidak keberatan, katakanlah, mewakili masing-masing dari jutaan karakter mereka menggunakan campuran kata, 100rb menggabungkan karakter, maka tidak ada masalah; di sisi lain jika dipaksa untuk menggunakan lebih banyak byte daripada penduduk bumi membuat mereka merasa seperti warga negara kelas dua, kita bisa berada dalam beberapa konflik ( tidak seperti apa yang sudah kita amati dengan UTF-8 ).
sumber
Sunting: Pertanyaannya sekarang mengatakan "jutaan karakter baru". Ini membuatnya mudah untuk dijawab:
Tidak ada . Utf-8 adalah pengkodean Unicode. Unicode memiliki ruang kode yang memungkinkan 1.114.112 codepoint yang berbeda , dan kurang dari satu juta saat ini tidak ditugaskan. Jadi tidak mungkin untuk mendukung jutaan karakter baru di Unicode. Menurut definisi, tidak ada pengkodean Unicode yang dapat mendukung lebih banyak karakter daripada yang didefinisikan oleh Unicode. (Tentu saja Anda dapat menipu dengan menyandikan level lebih lanjut - jenis data apa pun dapat diwakili oleh hanya dua karakter.)
Untuk menjawab pertanyaan awal:
Unicode tidak mendukung bahasa seperti itu, ia mendukung karakter - simbol yang digunakan untuk mewakili bahasa dalam bentuk tertulis.
Tidak semua bahasa manusia memiliki representasi tertulis, jadi tidak semua bahasa manusia dapat didukung oleh Unicode. Selain itu banyak hewan berkomunikasi tetapi tidak memiliki bahasa tertulis. Paus, misalnya, memiliki bentuk komunikasi yang cukup kompleks untuk menyebut suatu bahasa, tetapi tidak memiliki bentuk tertulis apa pun (dan juga tidak dapat ditangkap oleh notasi fonetik yang ada). Jadi tidak semua bahasa di bumi dapat didukung oleh Unicode.
Lebih buruk lagi adalah sesuatu seperti bahasa lebah. Bukan saja tidak memiliki bentuk tertulis, itu tidak dapat diwakili secara bermakna dalam bentuk tertulis. Bahasa adalah sejenis tarian yang pada dasarnya menunjuk ke suatu arah tetapi bergantung pada posisi matahari saat ini. Oleh karena itu tarian hanya memiliki nilai informasi di tempat dan waktu tertentu di mana ia dilakukan. Representasi simbolik atau tekstual harus memasukkan informasi (lokasi, posisi matahari) yang bahasa lebah saat ini tidak dapat mengungkapkan.
Bahkan bentuk komunikasi tertulis atau simbolis mungkin tidak dapat direpresentasikan dalam Unicode. Misalnya ilustrasi atau komik tanpa kata tidak dapat didukung oleh Unicode karena kumpulan mesin terbang tidak terbatas. Anda akan melihat banyak komunikasi bergambar dalam pengaturan internasional seperti bandara, sehingga tidak terbayangkan bahwa ras alien yang bepergian ke luar angkasa akan berevolusi untuk menggunakan bahasa bergambar.
Bahkan jika ras alien memiliki bahasa dengan sistem penulisan dengan serangkaian simbol yang terbatas, sistem ini mungkin tidak dapat didukung di Unicode. Unicode mengharapkan tulisan menjadi urutan simbol linear. Notasi musik adalah contoh dari sistem penulisan yang tidak dapat sepenuhnya direpresentasikan dalam Unicode, karena makna dikodekan dalam pilihan simbol dan penempatan vertikal dan horizontal. (Unicode mendukung simbol musik individu, tetapi tidak dapat menyandikan skor.) Ras alien yang dikomunikasikan menggunakan musik polifonik (tidak jarang) atau saluran komunikasi dengan kompleksitas yang sama, mungkin memiliki sistem penulisan yang mirip dengan skor orkestra, dan Unicode tidak dapat mendukung ini.
Tetapi, demi argumen, anggaplah bahwa semua bahasa, bahkan bahasa asing, dapat diekspresikan sebagai urutan simbol linear yang dipilih dari himpunan terbatas. Apakah Unicode cukup besar untuk invasi alien? Unicode saat ini memiliki kurang dari satu juta titik kode yang belum ditetapkan. Bahasa Cina berisi seratus ribu karakter sesuai dengan kamus Cina paling komprehensif (tidak semua dari mereka saat ini didukung oleh Unicode sebagai karakter yang berbeda). Jadi hanya sepuluh bahasa dengan kompleksitas bahasa Mandarin yang akan menggunakan semua Unicode. Di bumi kita memiliki ratusan sistem penulisan yang berbeda, tetapi untungnya sebagian besar adalah alfabet dan bukan ideografis dan karena itu mengandung sejumlah kecil karakter. Jika semua bahasa tertulis menggunakan ideogram seperti bahasa Cina, Unicode bahkan tidak akan cukup besar untuk bumi. Penggunaan huruf berasal dari ucapan yang hanya menggunakan sejumlah fonem yang terbatas, tetapi itu khusus untuk fisiologi manusia. Jadi, bahkan sebuah planet alien tunggal dengan hanya selusin sistem penulisan ideografis dapat melebihi apa yang dapat didukung Unicode. Sekarang pertimbangkan apakah alien ini sudah menginvasi planet lain sebelum bumi dan memasukkan sistem penulisan mereka dalam serangkaian karakter yang harus didukung.
Perluasan atau modifikasi penyandian saat ini, atau pengenalan penyandian baru tidak akan menyelesaikan ini, karena batasannya adalah dalam jumlah titik kode yang didukung oleh Unicode.
Jadi jawabannya kemungkinan besar tidak.
sumber