从包含utf代码的字符串创建char

时间:2010-01-22 22:15:51

标签: java

我正在尝试用utf代码创建一个char。我正在从一个文件中读取此代码,该文件是一个字符映射。所有字符都由其UTF代码指定。

0020 SPACE
 0021 EXCLAMATION MARK
 0022报价标志
 。
 。
 点。

从文件中读取代码后,我最终将这个代码放在String中。如何将此代码(Stirng)转换为char?

3 个答案:

答案 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);
}