我试图从utf代码中创建char字符。我正在从一个文字中读取这个代码,这个文件是一个字符映射。所有字符都由其UTF代码指定。从包含utf代码的字符串中创建char字符
0020 SPACE
0021感叹号
0022引号
。
。
。
从文件中读取代码后,我最终得到了一个字符串中的代码。我如何将此代码(Stirng)转换为char?
我试图从utf代码中创建char字符。我正在从一个文字中读取这个代码,这个文件是一个字符映射。所有字符都由其UTF代码指定。从包含utf代码的字符串中创建char字符
0020 SPACE
0021感叹号
0022引号
。
。
。
从文件中读取代码后,我最终得到了一个字符串中的代码。我如何将此代码(Stirng)转换为char?
的代码存储在十六进制,所以我想你想的:
String code = "0021";
char c = (char)Integer.parseInt(code, 16);
System.out.println("Code: " + code + " Character: " + c);
我认为没有你的字符代码超过可以存储在一个字符,即字符的Basic Multilingual Plane最大值。由于您的数据格式显示为填充为零的最大长度为4个十六进制数字,因此我假定您需要考虑的所有字符实际上都是在BMP中。
如果不是这样,您将需要一个不同的解决方案。见Character.toChars(int)
。
使用Integer.parseInt(String, 16)
将其解析为整数,然后将其转换为char。
它看起来像UTF-16。要从这些字节创建字符串,请使用:
new String(byte[]{0x00, 0x21}, "UTF-16")
这会创建一个包含感叹号的字符串。该字符是charAt(0)。
编辑
可能不是最高效的方法,但它适用于其他的编码,以及...
编辑
OK,有一个误解,上面的代码不是一个解决方案,而是一个关于如何促进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);
}
downvote的任何理由? – 2010-01-22 22:47:39
@Andreas_D:因为OP希望有一个运行时解决方案,因此您需要编译时间,并提及并滥用UTF-16。 OP通过ParseInt()函数将其解码为int后,它已经具有十六进制的Unicode字符点),它们不需要UTF-16解码。 'char c =(char)0x0020'另一方面将是一个宝贵的贡献,我会建议编辑它。 – 2010-01-22 22:55:19
这是一个例子。只是一个例子。 – 2010-01-22 23:06:15
我不明白这个问题。你有“0020”,并想要相应的字符,就是这样吗? – 2010-01-22 22:17:42
是的,就是这样。 – Omar 2010-01-22 22:21:42