我在MySQL中有一些记录,例如
Váºn hà nh linh hoạt trong má»i Ä‘k giao thông
以十六进制格式
56 c3 a1 c2 ba c2 ad 6e 20 68 c3 83 c2 a0 6e 68 20 6c 69 6e 68 20 68 6f c3 a1 c2 ba c2 a1 74 20 74 72 6f 6e 67 20 6d c3 a1 c2 bb c2 8d 69 20 c3 84 e2 80 98 6b 20 67 69 61 6f 20 74 68 c3 83 c2 b4 6e 67 20
我不知道PHP如何保存它,但是从Java MySQL Connector读取它显示了一些奇怪的特性。我可以通过
来显示原文copy the text above --> Notepad++ - Encoding in ASCII --> Paste text
--> Encoding in UTF-8
原文应为:
Vận hành linh hoạt trong mọi đk giao thông
我知道问题是PHP保存了不正确的文本格式,但有没有办法在Java中正确解码?
答案 0 :(得分:1)
你确定十六进制是完全正确吗?这就是我做的......
String MESS = "56 c3 a1 c2 ba c2 ad 6e 20 68 c3 83 c2 a0 6e 68 20 6c 69 6e 68 20 68 6f c3 a1 c2 ba c2 a1 74 20 74 72 6f 6e 67 20 6d c3 a1 c2 bb c2 8d 69 20 c3 84 e2 80 98 6b 20 67 69 61 6f 20 74 68 c3 83 c2 b4 6e 67 20";
String[] hexchars = MESS.split(" ");
byte[] buf = new byte[hexchars.length];
for (int i = 0; i < hexchars.length; i++) {
buf[i] = (byte) Integer.parseInt(hexchars[i], 16);
}
try {
String s1 = new String(buf, "UTF-8"); // First encode UTF-8
buf = s1.getBytes("cp1252"); // ...then translate to cp1252
s1 = new String(buf, "UTF-8"); // ...then back to UTF-8
System.out.println(s1);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
打印结果是:
Vậnhànhlinhhouạttrongm ?iđkgiaothông
几乎正确。除了mọi的解码之外它是不正确的,这使我怀疑你提供的十六进制可能不正确。如果您100%确定它是正确的,我可以尝试多一点来解码它。
更新: 以下是我的进一步想法:
只有这样才有可能将MySQL Connector / J设置为正确的编码,然后可能在Java中应用第二次转换。