Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从包含utf代码的字符串创建字符_Java - Fatal编程技术网

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

Java 从包含utf代码的字符串创建字符,java,Java,我试图用utf代码创建一个字符。我正在从一个文件中读取这段代码,这个文件是一个字符映射。所有字符都由其UTF代码指定 0020空间 0021感叹号 0022引号 . . 从文件中读取代码后,我以字符串形式结束了此代码。如何将此代码转换为字符 代码以十六进制存储,因此我认为您需要: String code = "0021"; char c = (char)Integer.parseInt(code, 16); System.out.println("Code: " + code + " Cha

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

0020空间 0021感叹号 0022引号 . .


从文件中读取代码后,我以字符串形式结束了此代码。如何将此代码转换为字符

代码以十六进制存储,因此我认为您需要:

String code = "0021";
char c = (char)Integer.parseInt(code, 16);
System.out.println("Code: " + code + " Character: " + c);
我假设您的字符代码中没有一个超过了可以存储在字符中的最大值,即。因为您的数据格式似乎是零填充到最大长度为4个十六进制数字,所以我假设您需要考虑的所有字符实际上都在BMP。


如果不是这样,您将需要一个不同的解决方案。请参阅。

使用integer.parseIntString,16将其解析为整数,然后将其转换为字符。

它看起来像UTF-16。要从这些字节创建字符串,请使用:

new String(byte[]{0x00, 0x21}, "UTF-16")
这将创建一个包含感叹号的字符串。这个角色是charAt0

编辑

可能不是最有效的方法,但它也适用于其他编码

编辑

好的,这是一个误解,上面的代码不是一个解决方案,而是一个关于如何帮助字符串构造函数以特殊编码从一系列字节创建字符串的示例。作为一个例子,它看起来是静态的。以下是运行时解决方案,特别是已接受的解决方案更适合使用-这一个更通用:

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

我不明白这个问题。你有0020,想要对应的字符,对吗?我已经试过了。然而,一旦你得到像000A这样的代码,Integer.parseInt就会失败。你还记得16吗?这意味着将数字视为十六进制。如果忽略此参数,它将不起作用。糟糕,我没有意识到十六进制部分。@Mark Byers-像这样转换为字符只适用于基本多语言平面中的字符-请参阅Character.tocharint。@Mark Byers-你可能是对的,但很难从示例数据中分辨出来。将BMP代码点归零是很常见的:@Andreas_D:Downvote,因为OP希望有一个运行时解决方案-您的是编译时,用于提及和滥用UTF-16。OP已经具有十六进制的Unicode字符点,通过ParseInt函数将其解码为int后,它们不需要UTF-16解码。另一方面,char c=char 0x0020将是一个有价值的贡献,我建议在中编辑它。这是一个例子。举个例子,你还在滥用UTF-16。问题中看不到UTF-16!那么给定的编码是什么?也可能是UCS-2。关键是,在将字节转换为字符之前,必须考虑编码。UTF-16只是个猜测,至少他说的是“UTF代码”,而不是UTF-8。虽然我很确定他显示了unicode值,但这才是重点!没有编码!只有所谓的Unicode码点的整数值。如果您愿意,十六进制是这个问题中的编码。所有Unicode编码的要点是将Unicode代码点整数值编码为字节序列;但这可能是鸟叫声或烟雾信号,就像Unicode关心的那样——唯一有意义的方面是能够恢复原始的整数序列。