"హాయ్, అమిగో!"

"ఇప్పుడు మరొక ఆసక్తికరమైన అంశం కోసం సమయం వచ్చింది: ఎన్‌కోడింగ్‌లు."

"ప్రతి అక్షరానికి ఒక కోడ్ (సంఖ్య) ఉందని మీరు ఇప్పటికే ఎక్కడో విని ఉండవచ్చు. అందుకే చార్ రకం చిహ్నాలు మరియు సంఖ్యలను సూచించగలదు."

"ఉదాహరణకు, ఆంగ్ల వర్ణమాలలోని 'A' అక్షరానికి కోడ్ 65. 'B' 66, 'C' 67, మరియు మొదలైనవి. పెద్ద అక్షరాలు, చిన్న అక్షరాలు, సిరిలిక్ అక్షరాలు, చైనీస్ కోసం ప్రత్యేక కోడ్‌లు ఉన్నాయి. అక్షరాలు (అవును, చాలా మరియు చాలా కోడ్‌లు), సంఖ్యలు మరియు వివిధ చిహ్నాలు. క్లుప్తంగా, మీరు క్యారెక్టర్‌గా పిలిచే ఆచరణాత్మకంగా ప్రతిదానికీ కోడ్ ఉంటుంది."

"కాబట్టి, ప్రతి అక్షరం మరియు అక్షరం ఏదో ఒక సంఖ్యకు అనుగుణంగా ఉందా?"

"ఖచ్చితంగా."

"ఒక అక్షరాన్ని సంఖ్యగా మరియు సంఖ్యను అక్షరంగా మార్చవచ్చు. జావా సాధారణంగా వాటి మధ్య తేడాను చూడదు:"

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

"ఆసక్తికరమైన."

"కాబట్టి, ఎన్‌కోడింగ్ అనేది చిహ్నాల సముదాయం మరియు వాటికి సంబంధించిన కోడ్‌ల సమితి. కానీ కేవలం ఒక ఎన్‌కోడింగ్ మాత్రమే కనుగొనబడలేదు-కొన్ని ఉన్నాయి. ఇది తరువాత వరకు సాధారణ యూనివర్సల్ ఎన్‌కోడింగ్, యూనికోడ్ కనుగొనబడింది."

"అయితే ఎన్ని సార్వత్రిక ప్రమాణాలు కనిపెట్టబడినా, ఎవరూ పాత వాటిని విడిచిపెట్టడానికి తొందరపడరు. ఆపై ప్రతిదీ ఈ కార్టూన్‌లో వలె జరుగుతుంది:"

అక్షర ఎన్‌కోడింగ్‌లు - 1

"విన్సెంట్ మరియు నిక్ తమ స్వంత ఎన్‌కోడింగ్‌లను తయారు చేయాలని నిర్ణయించుకున్నారని ఊహించండి."

"ఇదిగో విన్సెంట్ ఎన్‌కోడింగ్:"
అక్షర ఎన్‌కోడింగ్‌లు - 2

"మరియు ఇదిగో నిక్ ఎన్‌కోడింగ్:"
అక్షర ఎన్‌కోడింగ్‌లు - 3

"వారు ఒకే అక్షరాలను కూడా ఉపయోగిస్తారు, కానీ అక్షరాల కోడ్‌లు భిన్నంగా ఉంటాయి."

"విన్సెంట్ ఎన్‌కోడింగ్‌ని ఉపయోగించి 'ABC-123' స్ట్రింగ్ ఫైల్‌కి వ్రాయబడినప్పుడు, మేము ఈ క్రింది బైట్‌లను పొందుతాము:"
అక్షర ఎన్‌కోడింగ్‌లు - 4

"ఇప్పుడు నిక్ ఎన్‌కోడింగ్‌ని ఉపయోగించే మరొక ప్రోగ్రామ్ ఫైల్‌ని చదవాలనుకుంటోంది:"

"ఇది ఇక్కడ చదవబడుతుంది: «345-IJK»."

"మరియు చెత్త విషయం ఏమిటంటే, ఎన్‌కోడింగ్‌లు సాధారణంగా ఫైల్‌లలో ఎక్కడా నిల్వ చేయబడవు, కాబట్టి డెవలపర్‌లు ఊహించవలసి ఉంటుంది."

"సరే, వారు వాటిని ఎలా ఊహించారు?"

"అది వేరే అంశం. అయితే ఎన్‌కోడింగ్‌లతో ఎలా పని చేయాలో నేను వివరించాలనుకుంటున్నాను. మీకు ఇప్పటికే తెలిసినట్లుగా, జావాలో చార్ పరిమాణం రెండు బైట్‌లు. మరియు జావా స్ట్రింగ్‌లు యూనికోడ్ ఆకృతిని ఉపయోగిస్తాయి."

"కానీ జావా మీకు తెలిసిన ఏదైనా ఎన్‌కోడింగ్‌లో స్ట్రింగ్‌ను బైట్‌ల సెట్‌గా మార్చడానికి మిమ్మల్ని అనుమతిస్తుంది. స్ట్రింగ్ క్లాస్ దీనికి ప్రత్యేక పద్ధతులను కలిగి ఉంది. జావాలో నిర్దిష్ట ఎన్‌కోడింగ్‌ను వివరించే ప్రత్యేక చార్సెట్ క్లాస్ కూడా ఉంది."

1) జావా సపోర్ట్ చేసే అన్ని ఎన్‌కోడింగ్‌ల జాబితాను నేను ఎలా పొందగలను?

"అందుకోసం అందుబాటులో ఉన్న అక్షరాలు అని పిలువబడే ఒక ప్రత్యేక స్టాటిక్ పద్ధతి ఉంది. "ఈ పద్ధతి జతల సమితిని అందిస్తుంది (ఎన్‌కోడింగ్ పేరు, ఎన్‌కోడింగ్‌ను వివరించే వస్తువు):"

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

"ప్రతి ఎన్‌కోడింగ్‌కు ఒక ప్రత్యేక పేరు ఉంటుంది. వాటిలో కొన్ని ఇక్కడ ఉన్నాయి: UTF-8, UTF-16, Windows-1251, KOI8-R,..."

2) నేను ప్రస్తుత యాక్టివ్ ఎన్‌కోడింగ్‌ను (యూనికోడ్) ఎలా పొందగలను?

" దాని కోసం డిఫాల్ట్‌చార్సెట్ అనే ప్రత్యేక పద్ధతి ఉంది .

Charset currentCharset = Charset.defaultCharset();

3) నేను స్ట్రింగ్‌ను నిర్దిష్ట ఎన్‌కోడింగ్‌కి ఎలా మార్చగలను?

"జావాలో, జావాకు తెలిసిన ఏదైనా ఎన్‌కోడింగ్‌లో మీరు స్ట్రింగ్‌ను బైట్ అర్రేగా మార్చవచ్చు:"

పద్ధతి ఉదాహరణ
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) నేను చదివిన బైట్ శ్రేణిని ఫైల్ నుండి స్ట్రింగ్‌గా మార్చడం ఎలా, ఫైల్‌లో దాని ఎన్‌కోడింగ్ ఏమిటో నాకు తెలిస్తే?

"ఇది మరింత సులభం. స్ట్రింగ్ క్లాస్‌లో ప్రత్యేక కన్స్ట్రక్టర్ ఉంది:"

పద్ధతి ఉదాహరణ
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) నేను ఒక బైట్ శ్రేణిని ఒక ఎన్‌కోడింగ్ నుండి మరొకదానికి ఎలా మార్చగలను?

"చాలా మార్గాలు ఉన్నాయి. ఇక్కడ సరళమైన వాటిలో ఒకటి:"

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);

"అదే అనుకున్నాను. ఆసక్తికరమైన పాఠానికి ధన్యవాదాలు, రిషీ."