Perbedaan format Unicode, UTF, ASCII, ANSI


351

Apa perbedaan antara Unicode, UTF8, UTF7, UTF16, UTF32, ASCII, dan ANSIpengkodean?

Dengan cara apa ini bermanfaat bagi programmer?



6
sangat terkait: UTF-8 vs Unicode
Tobias Kienzler


Jawaban:


470

Turun daftar Anda:

  • " Unicode " bukan merupakan penyandian, meskipun sayangnya, banyak dokumentasi secara tidak tepat menggunakannya untuk merujuk pada penyandian Unicode mana pun yang digunakan sistem tertentu secara default. Pada Windows dan Java, ini sering berarti UTF-16; di banyak tempat lain, itu berarti UTF-8. Benar, Unicode mengacu pada set karakter abstrak itu sendiri, bukan pada pengkodean tertentu.
  • UTF-16 : 2 byte per "unit kode". Ini adalah format asli string di .NET, dan umumnya di Windows dan Java. Nilai di luar Basic Multilingual Plane (BMP) dikodekan sebagai pasangan pengganti. Ini dulu relatif jarang digunakan, tetapi sekarang banyak aplikasi konsumen perlu menyadari karakter non-BMP untuk mendukung emoji.
  • UTF-8 : Pengodean panjang variabel, 1-4 byte per titik kode. Nilai ASCII dikodekan sebagai ASCII menggunakan 1 byte.
  • UTF-7 : Biasanya digunakan untuk penyandian email. Kemungkinannya adalah jika Anda berpikir Anda membutuhkannya dan Anda tidak melakukan surat, Anda salah. (Itu hanya pengalaman saya tentang orang-orang yang memposting di newsgroup dll - di luar surat, itu benar-benar tidak banyak digunakan sama sekali.)
  • UTF-32 : Memperbaiki penyandian lebar menggunakan 4 byte per titik kode. Ini tidak terlalu efisien, tetapi membuat hidup lebih mudah di luar BMP. Saya memiliki .NETUtf32String kelas sebagai bagian dari perpustakaan MiscUtil saya , jika Anda menginginkannya. (Ini belum diuji sepenuhnya, ingatlah.)
  • ASCII : Pengodean byte tunggal hanya menggunakan 7 bit terbawah. (Poin kode Unicode 0-127.) Tidak ada aksen, dll.
  • ANSI: Tidak ada satu pun yang diperbaiki encoding ANSI - ada banyak dari mereka. Biasanya ketika orang mengatakan "ANSI" mereka berarti "lokal default / codepage untuk sistem saya" yang diperoleh melalui Encoding.Default , dan seringkali Windows-1252 tetapi bisa menjadi lokal lain.

Ada lebih banyak di halaman Unicode saya dan tips untuk debugging masalah Unicode .

Sumber besar kode lainnya adalah unicode.org yang berisi lebih banyak informasi daripada yang dapat Anda lakukan - mungkin sedikit yang paling berguna adalah bagan kode .


6
Istilah "ANSI" bila diterapkan ke halaman kode 8-bit Microsoft adalah istilah yang salah. Mereka didasarkan pada draft yang diajukan untuk standarisasi ANSI, tetapi ANSI sendiri tidak pernah menstandarisasi mereka. Windows-1252 (halaman kode paling sering disebut "ANSI") mirip dengan ISO 8859-1 (Latin-1), kecuali bahwa Windows-1252 memiliki karakter yang dapat dicetak dalam kisaran 0x80..0x9F, di mana ISO 8859-1 memiliki karakter kontrol dalam rentang itu. Unicode juga memiliki karakter kontrol dalam rentang itu. en.wikipedia.org/wiki/Windows_code_page
Keith Thompson

1
@ jp2code: Saya tidak akan - tetapi Anda perlu membedakan antara "konten yang dikirim kembali melalui HTTP dari server web" dan "konten yang dikirim melalui email". Bukan konten halaman web yang mengirim email - mungkin itu adalah aplikasi di baliknya. Konten web akan menjadi yang terbaik di UTF-8; konten surat bisa di UTF-7, meskipun saya curiga tidak masalah untuk menyimpannya di UTF-8 hari ini.
Jon Skeet

2
Untuk UTF-16, IMHO, saya akan mengatakan "2 byte per unit kode" karena titik kode di luar BMP akan dikodekan dalam pasangan pengganti sebagai 2 unit kode (4 byte).
Ludovic Kuty

1
Merindukan perbedaan antara UTF-16LE (dalam .NET) dan BE serta gagasan BOM.
Maarten Bodewes

2
@Andrew: Tidak, tidak ada penanda penyandian (umum). Windows 1252 tidak dapat mewakili Unicode BOM, dan itu tidak masuk akal karena itu hanya encoding satu byte per char.
Jon Skeet

68

Beberapa bacaan untuk Anda mulai tentang penyandian karakter: Joel on Software: Minimum Mutlak Setiap Pengembang Perangkat Lunak Sepenuhnya, Pasti Harus Tahu Tentang Unicode dan Set Karakter (Tanpa Alasan!)

By the way - ASP.NET tidak ada hubungannya dengan itu. Pengkodean bersifat universal.


7
Dijawab di sini 6 tahun setelah artikel ditulis. Saya membacanya 8 tahun setelah posting ditulis. 14 tahun kemudian dan itu masih merupakan bacaan yang bagus. Itu lebih dari separuh hidup saya yang lalu. Luar biasa.
Dave Knise
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.