我正在尝试用utf代码创建一个char。我正在从一个文件中读取此代码,该文件是一个字符映射。所有字符都由其UTF代码指定。
0020 SPACE
0021 EXCLAMATION MARK
0022报价标志
。
。
点。
从文件中读取代码后,我最终将这个代码放在String中。如何将此代码(Stirng)转换为char?
答案 0 :(得分:4)
代码以十六进制存储,所以我想你想要这个:
String code = "0021";
char c = (char)Integer.parseInt(code, 16);
System.out.println("Code: " + code + " Character: " + c);
我假设您的所有字符代码都不超过可以存储在char中的最大值,即Basic Multilingual Plane中的字符。由于您的数据格式似乎为零填充,最大长度为4个十六进制数字,因此我假设您需要考虑的所有字符实际上都在BMP中。
如果不是这种情况,您将需要一个不同的解决方案。请参阅Character.toChars(int)
。
答案 1 :(得分:1)
使用Integer.parseInt(String, 16)
将其解析为整数,然后将其转换为char。
答案 2 :(得分:0)
看起来像UTF-16。要从这些字节创建String,请使用:
new String(byte[]{0x00, 0x21}, "UTF-16")
这会创建一个包含感叹号的String。角色是charAt(0)。
修改强>
可能不是最高效的方法,但它也适用于其他编码......
修改强>
好的,有一个误解,上面的代码不是一个解决方案,而是一个关于如何促进String构造函数从特殊编码中的一系列字节创建String的示例。作为一个例子,它看起来是静态的。这是运行时解决方案(知道特别是接受的解决方案更适合 - 这个更通用):
public char decodeUTF16(byte b1, byte b2) {
return decode(new byte[]{b1, b2}).charAt(0);
}
public String decodeUTF16(byte[] bytes) {
return decode(bytes, "UTF-16");
}
public String decode(byte[] bytes, String encoding) {
return new String(bytes, encoding);
}