다음 코드자바 버그? utf8 인코딩에서 여분의 0 바이트가 필요한 이유는 무엇입니까?
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 인코딩 초과 바이트를 리턴
. 우리가 더 적게 잡으면 초과 바이트가 없습니다. 우리가 더 많은 것을 갖게되면 초과 바이트를 점점 더 많이 얻을 수 있습니다.왜?
어떻게 해결할 수 있습니까?