python如何在Java中将十六进制字符串转换为ANSI(窗口1252)并将ANSI(窗口1252)转换回十六进制字符串?
如何在Java中将十六进制字符串转换为ansi(窗口1252)和ansi(窗口1252)转换为十六进制字符串
python(工作完美)
q = "hex string value"
x = bytes.fromhex(q).decode('ANSI')
a = x.encode("ANSI")
a = a.hex()
if q==a:
print("Correct")
Java(此代码有一个问题)
String hexOri = "hex string value";
StringBuilder output = new StringBuilder();
for (int i = 0; i < hexOri.length(); i+=2) {
String str = hexOri.substring(i, i+2);
output.append((char)Integer.parseInt(str, 16));
}
System.out.println("ANSI = " + output);
char [] chars = output.toString().toCharArray();
StringBuffer hexOutput = new StringBuffer();
for(int i = 0; i < chars.length; i++){
hexOutput.append(Integer.toHexString((int)chars[i]));
}
System.out.println("HexOutput = " + hexOutput.toString());
System.out.println(hexOri.equals(hexOutput.toString()));
Python的输出
正确的
Python的预期输出
正确的
来自Java的输出
假的
Java的预期输出
正确的
# 1 楼答案
在java中,字符串是用UTF-16编码的,因此不能简单地读/写字符串的字节来获得所需的编码表示形式
应该使用
String#getBytes(String str, String charset)
将字符串转换为所需的编码并序列化为字节数组使用
new String(buffer,encoding)
对字节数组进行解码也必须做同样的事情在这两种情况下,如果使用不带字符集的方法,它将使用JVM实例的默认编码(它应该是系统字符集)