Saya bingung tentang pengodean teks dan charset. Untuk banyak alasan, saya harus belajar hal-hal non-Unicode, non-UTF8 dalam pekerjaan saya yang akan datang.
Saya menemukan kata "charset" di header email seperti pada "ISO-2022-JP", tetapi tidak ada pengkodean dalam editor teks. (Saya melihat-lihat editor teks yang berbeda.)
Apa perbedaan antara pengodean teks dan charset? Saya akan menghargai jika Anda bisa menunjukkan kepada saya beberapa contoh kasus penggunaan.
Jawaban:
Pada dasarnya:
sumber
Setiap penyandian memiliki charset tertentu yang terkait dengannya, tetapi mungkin ada lebih dari satu penyandian untuk charset yang diberikan. Charset hanyalah seperti apa itu, seperangkat karakter. Ada sejumlah besar rangkaian karakter, termasuk banyak yang ditujukan untuk skrip atau bahasa tertentu.
Namun, kami berjalan dengan baik dalam transisi ke Unicode, yang mencakup serangkaian karakter yang mampu mewakili hampir semua skrip dunia. Namun, ada beberapa penyandian untuk Unicode. Pengkodean adalah cara memetakan string karakter ke string byte. Contoh pengkodean Unicode termasuk UTF-8 , UTF-16 BE , dan UTF-16 LE . Masing-masing memiliki keunggulan untuk aplikasi atau arsitektur mesin tertentu.
sumber
Selain jawaban lain saya pikir artikel ini adalah bacaan yang baik http://www.joelonsoftware.com/articles/Unicode.html
Artikel itu berjudul " Minimum Yang Mutlak Setiap Pengembang Perangkat Lunak Sepenuhnya, Pasti Harus Tahu Tentang Unicode dan Set Karakter (Tanpa Alasan!) " Yang ditulis oleh Joel Spolsky . Esai ini sudah lebih dari 10 tahun, tetapi (sayangnya) isinya masih valid ...
sumber
Pengkodean karakter terdiri dari:
Langkah # 1 dengan sendirinya adalah "repertoar karakter" atau abstrak "set karakter", dan # 1 + # 2 = a "set karakter kode".
Tetapi kembali sebelum Unicode menjadi populer dan semua orang (kecuali orang Asia Timur) menggunakan pengodean byte tunggal, langkah # 3 dan # 4 adalah sepele (titik kode = kode unit = byte). Jadi, protokol yang lebih lama tidak dengan jelas membedakan antara "pengkodean karakter" dan "kumpulan karakter yang dikodekan". Protokol yang lebih lama digunakan
charset
ketika mereka benar-benar berarti penyandian.sumber
Melemparkan lebih banyak cahaya untuk orang yang mengunjungi selanjutnya, semoga akan membantu.
Set karakter
Ada karakter dalam setiap bahasa dan kumpulan karakter-karakter tersebut membentuk "set karakter" dari bahasa itu. Ketika karakter dikodekan maka itu diberikan pengidentifikasi unik atau nomor yang disebut sebagai titik kode. Di komputer, titik kode ini akan diwakili oleh satu atau lebih byte.
Contoh set karakter: ASCII (mencakup semua karakter bahasa Inggris), ISO / IEC 646, Unicode (mencakup karakter dari semua bahasa yang hidup di dunia)
Set Karakter Kode
Set karakter kode adalah set di mana nomor unik ditugaskan untuk setiap karakter. Angka unik itu disebut "titik kode".
Set karakter kode kadang-kadang disebut halaman kode.
Pengkodean
Pengkodean adalah mekanisme untuk memetakan titik-titik kode dengan beberapa byte sehingga karakter dapat dibaca dan ditulis secara seragam di seluruh sistem yang berbeda menggunakan skema pengkodean yang sama.
Contoh pengkodean: ASCII, skema pengkodean Unicode seperti UTF-8, UTF-16, UTF-32.
Elaborasi 3 konsep di atas
09 15
) ketika menggunakan pengkodean UTF-16FC
sementara di "UTF-8" itu diwakili sebagaiC3 BC
dan di UTF-16 sebagaiFE FF 00 FC
.09 15
), tiga byte dengan UTF-8 (E0 A4 95
), atau empat byte dengan UTF-32 (00 00 09 15
)sumber
Set karakter, atau repertoar karakter, hanyalah set (koleksi yang tidak diurut) dari karakter. Set karakter kode memberikan integer ("titik kode") ke setiap karakter dalam repertoar. Pengkodean adalah cara untuk menunjukkan titik kode secara jelas sebagai aliran byte.
sumber
Dicari untuk itu. http://en.wikipedia.org/wiki/Character_encoding
Perbedaannya tampaknya halus. Istilah charset sebenarnya tidak berlaku untuk Unicode. Unicode melewati serangkaian abstraksi. karakter abstrak -> titik kode -> penyandian poin kode ke byte.
Charset sebenarnya melewatkan ini dan langsung melompat dari karakter ke byte. urutan byte <-> urutan karakter
Singkatnya, pengodean: titik kode -> byte charset: karakter -> byte
sumber
Charset hanyalah seperangkat; itu mengandung, misalnya tanda Euro, atau yang lain tidak. Itu saja.
Pengkodean adalah pemetaan bijective dari set karakter ke set bilangan bulat. Jika mendukung tanda Euro, itu harus menetapkan bilangan bulat spesifik untuk karakter itu dan tidak ke yang lain.
sumber
Menurut pendapat saya, charset adalah bagian dari pengkodean (komponen), pengkodean memiliki atribut charset, sehingga charset dapat digunakan dalam banyak pengkodean. Misalnya unicode adalah charset yang digunakan dalam pengkodean seperti UTF-8, UTF-16 dan sebagainya. Lihat ilustrasi di sini:
Char di charset tidak berarti tipe char di dunia pemrograman, itu berarti char di dunia nyata, dalam bahasa Inggris itu mungkin sama, tetapi dalam bahasa lain tidak, seperti bahasa Cina, '我' adalah 'char' yang tidak terpisahkan dalam charsets (UNICODE, GB [digunakan dalam GBK dan GB2312]), 'a' juga merupakan char in charset (ASCII, ISO-8859 , UNICODE).
sumber
Menurut pendapat saya, kata "charset" harus dibatasi untuk mengidentifikasi parameter yang digunakan dalam HTTP, MIME, dan standar serupa untuk menentukan pengkodean karakter (pemetaan dari serangkaian karakter teks ke urutan byte) dengan nama. Sebagai contoh:
charset=utf-8
.Saya menyadari, bagaimanapun, bahwa MySQL, Java, dan tempat-tempat lain dapat menggunakan kata "charset" yang berarti pengkodean karakter.
sumber
Pengkodean adalah pemetaan antara byte dan karakter dari set karakter, jadi akan sangat membantu untuk mendiskusikan dan memahami perbedaan antara byte dan karakter .
Pikirkan byte sebagai angka antara 0 dan 255, sedangkan karakter adalah hal-hal abstrak seperti "a", "1", "$" dan "Ä". Set semua karakter yang tersedia disebut set karakter .
Setiap karakter memiliki urutan satu atau lebih byte yang digunakan untuk merepresentasikannya; Namun, jumlah dan nilai byte yang tepat tergantung pada pengkodean yang digunakan dan ada banyak pengkodean yang berbeda.
Sebagian besar pengkodean didasarkan pada set karakter lama dan pengkodean yang disebut ASCII yang merupakan byte tunggal per karakter (sebenarnya, hanya 7 bit) dan berisi 128 karakter termasuk banyak karakter umum yang digunakan dalam bahasa Inggris AS.
Misalnya, berikut adalah 6 karakter dalam set karakter ASCII yang diwakili oleh nilai 60 hingga 65.
Dalam set ASCII lengkap, nilai terendah yang digunakan adalah nol dan tertinggi 127 (keduanya adalah karakter kontrol tersembunyi).
Namun, begitu Anda mulai membutuhkan lebih banyak karakter daripada yang disediakan ASCII dasar (misalnya, huruf dengan aksen, simbol mata uang, simbol grafik, dll.), ASCII tidak cocok dan Anda membutuhkan sesuatu yang lebih luas. Anda memerlukan lebih banyak karakter (kumpulan karakter yang berbeda) dan Anda memerlukan pengodean yang berbeda karena 128 karakter tidak cukup untuk memuat semua karakter. Beberapa pengkodean menawarkan satu byte (256 karakter) atau hingga enam byte.
Seiring waktu, banyak penyandian telah dibuat. Di dunia Windows, ada CP1252, atau ISO-8859-1, sedangkan pengguna Linux cenderung menyukai UTF-8. Java menggunakan UTF-16 secara asli.
Satu urutan nilai byte untuk karakter dalam satu pengkodean mungkin berarti karakter yang sama sekali berbeda di pengkodean lain, atau bahkan mungkin tidak valid.
Misalnya, dalam ISO 8859-1 , â diwakili oleh satu byte dari nilai
226
, sedangkan di UTF-8 itu adalah dua byte:195, 162
. Namun, dalam ISO 8859-1 ,195, 162
akan ada dua karakter, Ã, ¢ .Ketika komputer menyimpan data tentang karakter secara internal atau mengirimkannya ke sistem lain, mereka menyimpan atau mengirim byte. Bayangkan sebuah sistem membuka file atau menerima pesan melihat byte
195, 162
. Bagaimana cara mengetahui karakter apa ini?Agar sistem dapat mengartikan byte tersebut sebagai karakter aktual (dan karenanya menampilkannya atau mengonversinya ke pengkodean lain), perlu mengetahui pengkodean yang digunakan. Itulah sebabnya penyandian muncul dalam header XML atau dapat ditentukan dalam editor teks. Ini memberitahu sistem pemetaan antara byte dan karakter.
sumber