"Halo, Amigo!"

"Saiki wektu kanggo topik menarik liyane: encodings."

"Mbok menawa sampeyan wis krungu ing ngendi wae yen saben karakter duwe kode (nomer). Mulane jinis char bisa makili simbol lan angka."

"Contone, kode huruf 'A' ing alfabet Inggris yaiku 65. 'B' yaiku 66, 'C' yaiku 67, lan liya-liyane. Ana kode unik kanggo huruf gedhe, huruf cilik, huruf Cyrillic, Cina. karakter (ya, akeh lan akeh kode), angka, lan macem-macem simbol. Cekakipun, ana kode kanggo meh kabeh sampeyan bakal nelpon karakter.

"Dadi, saben huruf lan karakter cocog karo sawetara nomer?"

"Satemene."

"A karakter bisa diowahi kanggo nomer, lan nomer kanggo karakter. Jawa umume ora weruh prabédan antarane wong-wong mau: "

char c = 'A'; //The code (number) for 'A' is 65
c++; //Now c contains the number 66, which is the code for 'B'

"Menarik."

"Dadi, enkoding minangka sakumpulan simbol lan sakumpulan kode sing cocog. Nanging ora mung siji enkoding sing ditemokaké - ana sawetara.

"Nanging ora ketompo carane akeh standar universal sing diciptakake, ora ana sing cepet-cepet ninggalake sing lawas. Banjur kabeh kedadeyan kaya ing kartun iki: "

Encoding aksara - 1

"Bayangake yen Vincent lan Nick mutusake nggawe enkoding dhewe."

"Iki enkoding Vincent:"
Encoding aksara - 2

"Lan iki enkoding Nick:"
Encoding aksara - 3

"Malah padha nggunakake karakter sing padha, nanging kode kanggo karakter beda."

"Nalika string 'ABC-123' ditulis menyang file nggunakake enkoding Vincent, kita entuk set bita ing ngisor iki:"
Encoding aksara - 4

"Lan saiki program liyane sing nggunakake enkoding Nick pengin maca file kasebut:"

"Iki apa sing bakal diwaca: «345-IJK».

"Lan sing paling awon yaiku enkoding biasane ora disimpen ing ngendi wae ing file, mula pangembang kudu ngira."

"Lha, kepiye carane dheweke bisa ngira-ngira?"

"Iku topik sing beda. Nanging aku pengin nerangake carane nggarap enkoding. Kaya sing wis dingerteni, ukuran char ing Jawa yaiku rong bita. Lan Java Strings nggunakake format Unicode."

"Nanging Jawa ngijini sampeyan Ngonversi String menyang pesawat saka bita ing sembarang enkoding sing ngerti. Kelas String wis cara khusus kanggo iki. Jawa uga wis kelas Charset khusus sing njlèntrèhaké enkoding tartamtu."

1) Kepiye carane entuk dhaptar kabeh enkoding sing didhukung Jawa?

"Ana cara statis khusus sing disebut availableCharsets kanggo iku. "Cara iki ngasilake pasangan pasangan (jeneng enkoding, obyek sing njlèntrèhaké enkoding):."

SortedMap<String,Charset> charsets = Charset.availableCharsets();

"Saben enkoding duwe jeneng unik. Iki sawetara: UTF-8, UTF-16, Windows-1251, KOI8-R,…"

2) Kepiye carane entuk enkoding aktif saiki (Unicode)?

"Ana cara khusus sing diarani defaultCharset kanggo iku.

Charset currentCharset = Charset.defaultCharset();

3) Kepiye carane ngowahi String dadi enkoding tartamtu?

"Ing Jawa, sampeyan bisa ngowahi String dadi array byte ing enkoding apa wae sing dingerteni Jawa:"

Metode Tuladha
byte[] getBytes()
String s = "Good news, everyone!";
byte[] buffer = s.getBytes()
byte[] getBytes(Charset charset)
String s = "Good news, everyone!";
Charset koi8 = Charset.forName("KOI8-R");
byte[] buffer = s.getBytes(koi8);
byte[] getBytes(String charsetName)
String s = "Good news, everyone!";
byte[] buffer = s.getBytes("Windows-1251")

4) Kepiye carane ngowahi array byte sing diwaca saka file menyang String, yen aku ngerti apa enkoding ing file kasebut?

"Iki malah luwih gampang. Kelas String duwe konstruktor khusus: "

Metode Tuladha
String(byte bytes[])
byte[] buffer = new byte[1000];
inputStream.read(buffer);

String s = new String(buffer);
String(byte bytes[], Charset charset)
byte[] buffer = new byte[1000];
inputStream.read(buffer);

Charset koi8 = Charset.forName("KOI8-R");
String s = new String(buffer, koi8);
String(byte bytes[], String charsetName)
byte[] buffer = new byte[1000];
inputStream.read(buffer);

String s = new String(buffer, "Windows-1251");

5) Kepiye carane ngowahi array byte saka siji enkoding menyang liyane?

"Ana akeh cara. Iki salah siji sing paling gampang:"

Charset koi8 = Charset.forName("KOI8-R");
Charset windows1251 = Charset.forName("Windows-1251");

byte[] buffer = new byte[1000];
inputStream.read(buffer);
String s = new String(buffer, koi8);
buffer = s.getBytes(windows1251);
outputStream.write(buffer);

"Iku sing dakkira. Matur nuwun kanggo pelajaran sing menarik, Rishi."