Các mã sauLỗi Java? Tại sao thêm 0 byte trong mã hóa 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();
}
}
lợi nhuận
61616161616161616161
6161616161616161616100
ví dụ: utf8 mã hóa trả về byte dư thừa. Nếu chúng tôi mất ít hơn một s, sau đó chúng tôi sẽ không có byte dư thừa. Nếu chúng ta lấy thêm a-s, chúng ta có thể nhận được nhiều byte dư thừa hơn.
Tại sao?
Làm cách nào để giải quyết vấn đề này?