Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解码php保存的未知字符集文本_Java_Php_Character Encoding - Fatal编程技术网

Java 解码php保存的未知字符集文本

Java 解码php保存的未知字符集文本,java,php,character-encoding,Java,Php,Character Encoding,我在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

我在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是如何保存它的,但从JavaMySQL连接器中读取它时会显示一些奇怪的字符。我可以让它显示原始文本

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中正确解码它?

你确定十六进制是正确的吗?我做了

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();
}
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 61 6f 20 74 68 c3 83 c2 b4 6 6 E 67 20”;
字符串[]hexchars=MESS.split(“”);
byte[]buf=新字节[hexchars.length];
for(int i=0;i
打印结果为:

五ận hánh linh hoạt trong m�?我đk giao thông

这几乎是对的。除了m的解码ọ我认为这是不正确的,这使我怀疑你提供的十六进制可能是不正确的。如果你100%确定它是正确的,我可以尝试多一点来解码它

更新: 以下是我进一步的想法:

  • 您需要了解MySQL本身(数据库)的编码设置
  • 您需要了解PHP的编码设置
    • 可能在PHP.INI中
    • 可能在填充表的页面的HTML元数据中设置
  • 您需要找出PHP MySQL驱动程序运行时使用的任何编码

只有到那时,才有可能将MySQL连接器/J设置为正确的编码,然后可能在Java中应用第二次转换。

看到这一点。这里@brettw@XtraCode:yep,我已经尝试了一些类似的东西:
新字符串(res.getBytes(),“UTF-8”)
,但没有成功。我发现的最相似的主题是,但我仍然无法在Python和Java中使用它。是的,我从Navicat Mysql附加了hexdump,看起来hex是正确的。PHP代码是否也正确读取了数据?或者它只插入数据而从不读取数据?是的,PHP正确地读取了它(注意:我在记事本++上的工作顺序是从问题中获取原始文本)。