如何在 Java 中将特定字符集转换为 unicode?
字符集在这里已经讨论了很多,但我认为这个还没有被覆盖。
我有一个符合标准的十六进制字符串length%4==0
(例如\ud3faef8e
)。通常我只是在 HTML 容器中显示它并添加&#x
到每个十六进制四元组的前面和;
后面。
但在这种情况下,以下过程导致正确的输出(非Java)
- 将十六进制字符串粘贴到 Hex-Editor 并将文件保存到
test.txt
(utf-8) - 用记事本++打开文件
- 将编码更改为简体中文(GB2312)
现在我正在尝试在 Java 中做同样的事情。
// having hex convert to ascii
String ascii = "";
for (int cnt = 0; cnt <= unicode.length() - 2; cnt += 2) {
String tmp = unicode.substring(cnt, cnt + 2);
int decimal = Integer.parseInt(tmp, 16);
ascii += (char) decimal;
}
// writing ascii to file at this point leads to the same result as in step 2 before
try {
// get the bytes
byte[] utf8 = ascii.getBytes("UTF-8"); // == UTF8
// convert to gb2312
String converted = new String(utf8, "GB2312"); // == EUC_CN
// write to file (writer with declared UTF-8)
writeToFile(converted, 20 + cntu);
cntu++;
} catch (Exception e) {
System.err.println(e.getMessage());
}
输出看起来根据应该输出,除了随机显示以下字符的事实: 为什么会出现这个?我怎样才能摆脱它?
最后,我想得到的是再次转换后的unicode,以便能够用我原来的方法(폴
)显示它,但我还没有找到再次获取十六进制值的方法(他们没有符合条件length%4==0
)。如何获取字符的十六进制值?
更新1
更准确地说,关于输入,我假设它是 Unicode,因为字符串的开头是\u
,这对于我通常的方法来说已经足够了,但在我上面描述的情况下则不然。
更新2
writeToFile 方法
FileOutputStream fos = new FileOutputStream("test" + id + ".txt");
Writer out = new OutputStreamWriter(fos, "UTF8");
out.write(str);
out.close();
我也试过了GB2312
,但没有任何变化。我仍然得到? 在正确的字符之间。
更新3
预期的输出\ud3f6ef8e
是遇飵,按照步骤 1 到 3 即可得到。(以 HxD 作为十六进制编辑器的示例)