निम्नलिखित कोडजावा बग? Utf8 एन्कोडिंग में अतिरिक्त शून्य बाइट क्यों?
public class CharsetProblem {
public static void main(String[] args) {
//String str = "aaaaaaaaa";
String str = "aaaaaaaaaa";
Charset cs1 = Charset.forName("ASCII");
Charset cs2 = Charset.forName("utf8");
System.out.println(toHex(cs1.encode(str).array()));
System.out.println(toHex(cs2.encode(str).array()));
}
public static String toHex(byte[] outputBytes) {
StringBuilder builder = new StringBuilder();
for(int i=0; i<outputBytes.length; ++i) {
builder.append(String.format("%02x", outputBytes[i]));
}
return builder.toString();
}
}
रिटर्न
61616161616161616161
6161616161616161616100
अर्थात UTF8 एन्कोडिंग रिटर्न अतिरिक्त बाइट। यदि हम कम एस लेते हैं, तो हमारे पास कोई अतिरिक्त बाइट नहीं होगा। यदि हम अधिक से अधिक लेते हैं तो हम अधिक से अधिक बाइट प्राप्त कर सकते हैं।
क्यों?
कोई इसे कैसे काम कर सकता है?