Apa perbedaan sebenarnya antara Unicode dan ASCII?
ASCII memiliki total 128 karakter (256 dalam set diperluas).
Apakah ada spesifikasi ukuran untuk karakter Unicode?
Apa perbedaan sebenarnya antara Unicode dan ASCII?
ASCII memiliki total 128 karakter (256 dalam set diperluas).
Apakah ada spesifikasi ukuran untuk karakter Unicode?
Jawaban:
ASCII mendefinisikan 128 karakter, yang dipetakan ke angka 0-127. Unicode mendefinisikan (kurang dari) 2 21 karakter, yang, sama halnya, memetakan ke angka 0–2 21 (meskipun tidak semua angka saat ini ditetapkan, dan beberapa dicadangkan).
Unicode adalah superset dari ASCII, dan angka 0-127 memiliki arti yang sama dalam ASCII seperti pada Unicode. Misalnya, angka 65 berarti "Modal Latin 'A'".
Karena karakter Unicode umumnya tidak masuk ke dalam satu byte 8-bit, ada banyak cara untuk menyimpan karakter Unicode dalam urutan byte, seperti UTF-32 dan UTF-8.
Memahami mengapa ASCII dan Unicode diciptakan pada awalnya membantu saya memahami perbedaan antara keduanya.
ASCII, Origins
Seperti yang dinyatakan dalam jawaban lain, ASCII menggunakan 7 bit untuk mewakili karakter. Dengan menggunakan 7 bit, kami dapat memiliki maksimal 2 ^ 7 (= 128) kombinasi berbeda * . Yang berarti bahwa kami dapat mewakili 128 karakter maksimum.
Tunggu, 7 bit? Tapi mengapa tidak 1 byte (8 bit)?
Bit terakhir (8) digunakan untuk menghindari kesalahan sebagai bit paritas . Ini relevan tahun lalu.
Sebagian besar karakter ASCII adalah karakter alfabet yang dapat dicetak seperti abc, ABC, 123,? & !, dll. Lainnya adalah karakter kontrol seperti carriage return, line feed , tab, dll.
Lihat di bawah representasi biner dari beberapa karakter di ASCII:
0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)
Lihat tabel ASCII lengkap di sini .
ASCII dimaksudkan hanya untuk bahasa Inggris.
Apa? Kenapa hanya bahasa Inggris? Begitu banyak bahasa di sana!
Karena pusat industri komputer berada di USA saat itu. Akibatnya, mereka tidak perlu mendukung aksen atau tanda lain seperti á, ü, ç, ñ, dll. (Alias diakritik ).
ASCII Diperpanjang
Beberapa orang pintar mulai menggunakan bit ke-8 (bit yang digunakan untuk paritas) untuk menyandikan lebih banyak karakter untuk mendukung bahasa mereka (untuk mendukung "é", dalam bahasa Prancis, misalnya). Hanya menggunakan satu bit ekstra menggandakan ukuran tabel ASCII asli untuk memetakan hingga 256 karakter (2 ^ 8 = 256 karakter). Dan bukan 2 ^ 7 seperti sebelumnya (128).
10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)
Nama untuk "ASCII ini diperluas hingga 8 bit dan bukan 7 bit seperti sebelumnya" bisa disebut sebagai "extended ASCII" atau "8-bit ASCII".
Seperti @Tom tunjukkan dalam komentarnya di bawah ini tidak ada yang namanya " extended ASCII " namun ini adalah cara mudah untuk merujuk pada trik 8-bit ini. Ada banyak variasi dari tabel ASCII 8-bit, misalnya, ISO 8859-1, juga disebut ISO Latin-1 .
Unicode, Bangkit
ASCII Extended memecahkan masalah untuk bahasa yang didasarkan pada alfabet Latin ... bagaimana dengan yang lain yang membutuhkan alfabet yang sama sekali berbeda? Yunani? Rusia? Cina dan sejenisnya?
Kami akan membutuhkan set karakter yang sama sekali baru ... itulah rasional di belakang Unicode. Unicode tidak mengandung setiap karakter dari setiap bahasa, tetapi pasti berisi sejumlah besar karakter ( lihat tabel ini ).
Anda tidak dapat menyimpan teks ke hard drive Anda sebagai "Unicode". Unicode adalah representasi abstrak dari teks. Anda perlu "menyandikan" representasi abstrak ini. Di situlah pengkodean ikut bermain.
Pengkodean: UTF-8 vs UTF-16 vs UTF-32
Jawaban ini cukup baik dalam menjelaskan dasar-dasarnya:
UTF-8 menggunakan set ASCII untuk 128 karakter pertama. Itu berguna karena itu berarti teks ASCII juga berlaku di UTF-8.
Ilmu tentang cara menghafal:
catatan:
Kenapa 2 ^ 7?
Ini jelas bagi sebagian orang, tetapi untuk berjaga-jaga. Kami memiliki tujuh slot yang diisi dengan 0 atau 1 ( Kode Biner ). Masing-masing dapat memiliki dua kombinasi. Jika kita memiliki tujuh titik, kita memiliki 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 kombinasi. Pikirkan ini sebagai kunci kombinasi dengan tujuh roda, setiap roda hanya memiliki dua angka.
Sumber: Wikipedia , posting blog yang luar biasa ini dan Mocki di mana saya awalnya memposting ringkasan ini.
ASCII memiliki 128 poin kode, 0 hingga 127. Dapat memuat dalam satu byte 8-bit, nilai 128 hingga 255 cenderung digunakan untuk karakter lain. Dengan pilihan yang tidak kompatibel, menyebabkan halaman kode bencana. Teks yang dikodekan dalam satu halaman kode tidak dapat dibaca dengan benar oleh program yang mengasumsikan atau menebak halaman kode lain.
Unicode muncul untuk menyelesaikan bencana ini. Versi 1 dimulai dengan 65536 poin kode, biasanya disandikan dalam 16 bit. Kemudian diperpanjang dalam versi 2 hingga 1,1 juta poin kode. Versi saat ini adalah 6.3, menggunakan 110.187 dari 1,1 juta poin kode yang tersedia. Itu tidak muat dalam 16 bit lagi.
Pengkodean dalam 16-bit adalah umum ketika v2 muncul, digunakan oleh sistem operasi Microsoft dan Apple misalnya. Dan runtimes bahasa seperti Java. V2 spec datang dengan cara untuk memetakan 1,1 juta poin kode menjadi 16-bit. Pengkodean yang disebut UTF-16, pengodean panjang variabel di mana satu titik kode dapat mengambil 2 atau 4 byte. Poin kode v1 asli mengambil 2 byte, yang ditambahkan mengambil 4.
Pengkodean panjang variabel lain yang sangat umum, yang digunakan dalam * nix sistem operasi dan alat-alat adalah UTF-8, sebuah titik kode dapat mengambil antara 1 dan 4 byte, kode ASCII asli mengambil 1 byte dan sisanya memerlukan lebih banyak. Satu-satunya pengkodean panjang non-variabel adalah UTF-32, membutuhkan 4 byte untuk titik kode. Tidak sering digunakan karena cukup boros. Ada yang lain, seperti UTF-1 dan UTF-7, banyak diabaikan.
Masalah dengan pengkodean UTF-16/32 adalah bahwa urutan byte akan tergantung pada endian-ness dari mesin yang membuat aliran teks. Jadi tambahkan ke campuran UTF-16BE, UTF-16LE, UTF-32BE dan UTF-32LE.
Adanya berbagai pilihan pengkodean ini membawa bencana halaman kode kembali ke tingkat tertentu, bersama dengan perdebatan sengit di antara programmer yang pilihan UTF adalah "terbaik". Hubungan mereka dengan standar sistem operasi cukup menarik. Salah satu tolok ukur adalah definisi BOM, Byte Order Mark, codepoint khusus (U + FEFF, nol lebar ruang) di awal aliran teks yang menunjukkan bagaimana sisa aliran dikodekan. Ini menunjukkan pengkodean UTF dan endianess dan netral untuk mesin rendering teks. Sayangnya itu opsional dan banyak programmer mengklaim hak mereka untuk menghilangkannya sehingga kecelakaan masih cukup umum.
java menyediakan dukungan untuk Unicode yaitu mendukung semua huruf di seluruh dunia. Oleh karena itu ukuran char di java adalah 2 byte. Dan kisaran 0 hingga 65535.
ASCII memiliki 128 posisi kode, dialokasikan untuk karakter grafik dan karakter kontrol (kode kontrol).
Unicode memiliki 1.114.112 posisi kode. Sekitar 100.000 dari mereka saat ini telah dialokasikan untuk karakter, dan banyak titik kode telah dibuat secara non-karakter (yaitu tidak pernah digunakan untuk menyandikan karakter apa pun), dan sebagian besar titik kode belum ditetapkan.
Satu-satunya kesamaan yang dimiliki ASCII dan Unicode adalah: 1) Mereka adalah kode karakter. 2) Posisi kode 128 pertama Unicode telah didefinisikan memiliki makna yang sama seperti di ASCII, kecuali bahwa posisi kode karakter kontrol ASCII hanya didefinisikan sebagai menunjukkan karakter kontrol, dengan nama yang sesuai dengan nama ASCII mereka, tetapi artinya adalah tidak didefinisikan dalam Unicode.
Namun, kadang-kadang, Unicode dicirikan (bahkan dalam standar Unicode!) Sebagai "ASCII lebar". Ini adalah slogan yang terutama mencoba untuk menyampaikan gagasan bahwa Unicode dimaksudkan untuk menjadi kode karakter universal dengan cara yang sama seperti ASCII dulu (meskipun repertoar karakter ASCII sangat tidak memadai untuk penggunaan universal), dibandingkan dengan menggunakan kode yang berbeda dalam berbagai sistem dan aplikasi dan untuk berbagai bahasa.
Unicode hanya mendefinisikan "ukuran logis" karakter: Setiap karakter memiliki nomor kode dalam rentang tertentu. Nomor kode ini dapat disajikan menggunakan penyandian transfer yang berbeda, dan secara internal, dalam memori, karakter Unicode biasanya direpresentasikan menggunakan satu atau dua kuantitas 16-bit per karakter, tergantung pada rentang karakter, kadang-kadang menggunakan satu kuantitas 32-bit per karakter.
ASCII dan Unicode adalah dua pengkodean karakter. Pada dasarnya, mereka adalah standar tentang bagaimana merepresentasikan perbedaan karakter dalam biner sehingga mereka dapat ditulis, disimpan, ditransmisikan, dan dibaca di media digital. Perbedaan utama antara keduanya adalah dalam cara mereka menyandikan karakter dan jumlah bit yang mereka gunakan untuk masing-masing. ASCII awalnya menggunakan tujuh bit untuk mengkodekan setiap karakter. Ini kemudian meningkat menjadi delapan dengan Extended ASCII untuk mengatasi ketidakmampuan asli yang asli. Sebaliknya, Unicode menggunakan program pengodean bit variabel di mana Anda dapat memilih antara pengodean 32, 16, dan 8-bit. Menggunakan bit lebih banyak memungkinkan Anda menggunakan lebih banyak karakter dengan mengorbankan file yang lebih besar sementara bit yang lebih sedikit memberi Anda pilihan terbatas tetapi Anda menghemat banyak ruang. Menggunakan bit lebih sedikit (mis
Salah satu alasan utama mengapa Unicode adalah masalah muncul dari banyak program ASCII diperpanjang non-standar. Kecuali jika Anda menggunakan halaman yang lazim, yang digunakan oleh Microsoft dan sebagian besar perusahaan perangkat lunak lain, maka Anda kemungkinan akan menghadapi masalah dengan karakter Anda yang muncul sebagai kotak. Unicode secara virtual menghilangkan masalah ini karena semua poin kode karakter distandarisasi.
Keuntungan utama lain dari Unicode adalah bahwa secara maksimal dapat mengakomodasi sejumlah besar karakter. Karena itu, Unicode saat ini mengandung sebagian besar bahasa tertulis dan masih memiliki ruang untuk lebih banyak lagi. Ini termasuk skrip kiri-ke-kanan seperti bahasa Inggris dan bahkan skrip kanan-ke-kiri seperti bahasa Arab. Cina, Jepang, dan banyak varian lainnya juga diwakili dalam Unicode. Jadi Unicode tidak akan diganti dalam waktu dekat.
Untuk menjaga kompatibilitas dengan ASCII lama, yang sudah digunakan secara luas pada saat itu, Unicode dirancang sedemikian rupa sehingga delapan bit pertama cocok dengan halaman ASCII paling populer. Jadi jika Anda membuka file yang dikodekan ASCII dengan Unicode, Anda masih mendapatkan karakter yang benar dikodekan dalam file. Ini memfasilitasi adopsi Unicode karena mengurangi dampak mengadopsi standar pengkodean baru bagi mereka yang sudah menggunakan ASCII.
Ringkasan:
1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
Diambil Dari: http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs
Angka yang diberikan hanya untuk menyimpan 1 karakter
ASCII mendefinisikan 128 karakter, karena Unicode berisi repertoar lebih dari 120.000 karakter.
Selain bagaimana UTF adalah superset dari ASCII, perbedaan lain yang perlu diketahui antara ASCII dan UTF adalah dalam hal pengkodean file disk dan representasi data serta penyimpanan dalam memori acak. Program tahu bahwa data yang diberikan harus dipahami sebagai string ASCII atau UTF baik dengan mendeteksi kode tanda byte pesanan khusus pada awal data, atau dengan mengasumsikan dari maksud programmer bahwa data adalah teks dan kemudian memeriksa untuk pola yang menunjukkan itu adalah dalam satu penyandian teks atau lainnya.
Menggunakan notasi awalan konvensional 0x
untuk data heksadesimal, referensi dasar yang baik adalah bahwa teks ASCII dimulai dengan nilai byte 0x00
untuk 0x7F
mewakili salah satu nilai karakter ASCII yang mungkin . Teks UTF biasanya ditunjukkan dengan dimulai dengan byte 0xEF 0xBB 0xBF
untuk UTF8. Untuk UTF16, mulai byte 0xFE 0xFF
, atau 0xFF 0xFE
digunakan, dengan urutan endian-byte teks yang ditunjukkan oleh urutan byte mulai. Kehadiran sederhana nilai-nilai byte yang tidak dalam kisaran ASCII dari nilai-nilai byte yang mungkin juga menunjukkan bahwa data mungkin UTF.
Ada tanda urutan byte lain yang menggunakan kode yang berbeda untuk menunjukkan data harus ditafsirkan sebagai teks yang dikodekan dalam standar pengkodean tertentu.