//the byte[] represents "C注ファイル PARM 年月日输入不正确 入力文字列" byte[] buf = new byte[] { 64, 64, 64, 64, 64, -61, 14, 73, 68, 67, -97, 67, 71, 67, -126, 67, -81, 15, 64, 64, 64, 64, 64, 64, 64, 64, 64, -41, -63, -39, -44, 64, 14, 82, -23, 90, -63, 84, -44, 85, -29, 84, -22, 73, -70, 91, -98, 84, -74, 15, 64, 64, 64, 64, 64, 64, 64, 64, 64, 14, 70, 101, 69, -9, 69, -54, 72, -14, 75, -76, 15, 64, 64, 64, 64, 64, 64, 64, 64, 64 }; String japaneseStr = new String(buf,"cp939");// convert to japanese System.out.println(japaneseStr);//output:" C注ファイル PARM 衷扞唖詑煤証昿翰 入力文字列 " String chineseStr = new String(buf,"cp935"); // convert to chinese System.out.println(chineseStr); //output:" C堡ファイル PARM 年月日输入不正确 ㄅ㈦⑹绑兜 " //"注ファイル" is japanese //"年月日输入不正确" is chinese //"入力文字列" is japanese //i want to get the result is " C注ファイル PARM 年月日输入不正确 入力文字列 "
问题1:buf是按照什么编码转换成这串byte数组的?
问题2:知道日文的编码中一个日文占几个字节不?我不知道
解决1:中文中按照GBK编码的话一个中文占2个字节,UTF-8一个汉字占3个字节
你的字符串中同时包含2种字符,因此必须使用能够包含两则的编码区编码和解码,记住,不只是解码,编码也是,
比如使用UTF-16或者UCS-2去编码解码,他们的一个码位能够包含一个中文,或者包含一个日文,因此按照这个解码肯定没问题。
初步确定你的乱码问题是编码成buf的时候出问题了的,因此不管你如何解码,已经无效了。
建议UTF-16