Apa perbedaan antara ASCII dan Unicode?


407

Apa perbedaan sebenarnya antara Unicode dan ASCII?

ASCII memiliki total 128 karakter (256 dalam set diperluas).

Apakah ada spesifikasi ukuran untuk karakter Unicode?




Jawaban:


534

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.


4
@riderBill: Sekarang bagaimana? 3 bit mana yang kamu bicarakan? Tidak ada bit di Unicode. Hanya codepoints.
Kerrek SB

@riderBill: lagi: "3 byte" mana yang Anda bicarakan sekarang? :-) (Semua ini tidak ada hubungannya dengan Unicode. Unicode hanya tentang menetapkan makna ke angka, ini bukan tentang bit dan byte.)
Kerrek SB

8
@riderBill: Unicode tidak "menggunakan antara 1 dan 4 byte". Unicode adalah penugasan makna ke angka. Itu tidak menggunakan byte. Ada skema pengkodean standar tertentu untuk mewakili titik kode Unicode sebagai aliran byte, tetapi mereka ortogonal ke Unicode sebagai rangkaian karakter. (Ya, jangan ragu untuk menghapus sesuka Anda.)
Kerrek SB

@CleanCrispCode Unicode sebenarnya adalah superset dari ISO-8859-1 , yang merupakan superset dari ASCII. Terkadang itu berguna untuk diketahui.
Mark Ransom

8
Untuk memperjelas, Unicode karakter set sendiri merupakan superset dari ISO-8859-1 set karakter , tapi UTF-8 encoding adalah tidak superset dari ISO-8859-1 encoding tapi ASCII encoding .
minmaxavg

393

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 dan UTF-16 adalah penyandian panjang variabel.
  • Dalam UTF-8, karakter dapat menempati minimal 8 bit.
  • Dalam UTF-16, panjang karakter dimulai dengan 16 bit.
  • UTF-32 adalah pengodean panjang tetap 32 bit.

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:

  • UTF- 8 : minimum 8 bit.
  • UTF- 16 : minimum 16 bit.
  • UTF- 32 : minimum dan maksimum 32 bit.

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.


7
Tidak ada teks selain teks yang disandikan. Beberapa pengkodean sangat mudah, terutama untuk set karakter dengan <= 256 codepoint. "Extended ASCII" adalah istilah yang sangat ambigu; ada beberapa yang mendukung bahasa Yunani, Rusia dan / atau Polandia. ASCII tidak cukup untuk teks bahasa Inggris, yang memang menggunakan á, ü, ç, ñ. Saya menduga bahwa itu dirancang untuk mendukung bahasa komputer daripada bahasa manusia. Secara dogmatis, ketika Anda menulis file atau streaming, Anda memiliki serangkaian karakter dan memilih penyandian. Pembaca Anda harus mendapatkan byte dan pengetahuan tentang pengkodean yang mana. Kalau tidak, komunikasi gagal.
Tom Blodget

Terima kasih banyak atas addendumnya. Saya memperbarui jawabannya.
Andrew

Terima kasih. Saya perhatikan di mana-mana tabel ASCII menunjukkan kode karakter sebagai 0-127 tetapi tabel UTF-8 menunjukkan kode sebagai hex dan bukan bilangan bulat. Apakah ada alasan untuk ini? Mengapa tabel UTF-X tidak menunjukkan 0-127 / 255/65535 dibandingkan 00-AF? Apakah ini ada artinya?
wayofthefuture

Terima kasih atas jawabannya. Pertanyaan cepat: 'Dalam UTF-16, panjang karakter dimulai dengan 16 bit' - Apakah ini berarti bahwa karakter alfanumerik tidak dapat diwakili oleh UTF-16 karena mereka hanya karakter 8-bit?
Moondra

Jawaban bagus, hanya saya yang punya satu masalah - apakah bahasa Polandia benar-benar menggunakan alfabet yang berbeda? Saya pikir kami menggunakan yang sama dengan bahasa Inggris, hanya dengan beberapa surat tambahan?
Nicofisi

89

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.


31

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.

masukkan deskripsi gambar di sini


Keypicture untuk menjelaskan .. Bagus
Ponmari Subramanian

2
Sayang sekali itu salah. "Kode ASCII (128)" akan benar.
Mark Tolonen

15

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.


2
Saya pikir pengkodean yang paling umum untuk Unicode adalah UTF-8 hari ini. UTF-8 mengkodekan sebagian besar titik kode dalam 1, 2 atau 3 byte.
Binarus

14

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


1

Penyimpanan

Angka yang diberikan hanya untuk menyimpan 1 karakter

  • ASCII ⟶ 2 7 bit ( 1 byte )
  • Extended ASCII ⟶ 2 8 bit (1 byte)
  • UTF-8 ⟶ minimum 2 8 , maksimum 2 32 bit (min 1, maks 4 byte)
  • UTF-16 ⟶ minimum 2 16 , maksimum 2 32 bit (min 2, maks 4 byte)
  • UTF-32 ⟶ 2 32 bit (4 byte)

Penggunaan (per Februari 2020)

Persentase situs web menggunakan berbagai pengkodean karakter


0

ASCII mendefinisikan 128 karakter, karena Unicode berisi repertoar lebih dari 120.000 karakter.


4
-1 untuk duplikat sepele "Jawaban" ini tanpa menambahkan apa pun pada Jawaban sebelumnya yang jauh sebelumnya. Tolong jangan tambahkan duplikasi kekacauan seperti ini (dapatkan perwakilan dengan cara lain yang sah).
cellepo

-1

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 0xuntuk data heksadesimal, referensi dasar yang baik adalah bahwa teks ASCII dimulai dengan nilai byte 0x00untuk 0x7Fmewakili salah satu nilai karakter ASCII yang mungkin . Teks UTF biasanya ditunjukkan dengan dimulai dengan byte 0xEF 0xBB 0xBFuntuk UTF8. Untuk UTF16, mulai byte 0xFE 0xFF, atau 0xFF 0xFEdigunakan, 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.

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.