Java中的Unicode到字符串转换

我正在建立一种语言,一种玩具语言。 语法\#0061应该将给定的Unicode转换为字符:

 String temp = yytext().subtring(2); 

然后在尝试将'\u'附加到字符串后,我注意到生成了错误。

我也尝试过"\\" + "u" + temp; 这种方式不做任何转换。

我基本上试图通过仅向方法提供'0061'来将Unicode转换为字符,帮助。

剥离’#’并使用Integer.parseInt("0061", 16)将hex数字转换为int 。 然后施放到char

(如果您已经手动实现了词法分析器,那么当您的词法分析器匹配unicode文字时,可以选择即时进行转换。但是在重读问题时,我看到您正在使用词法分析器生成器…好动! )

我基本上试图通过仅向方法提供’0061’来将unicode转换为字符,帮助。

 char fromUnicode(String codePoint) { return (char) Integer.parseInt(codePoint, 16); } 

您需要处理不良输入等,但这样做会有效。

您需要将特定代码点转换为char 。 你可以在正则表达式的帮助下做到这一点:

 String string = "blah #0061 blah"; Matcher matcher = Pattern.compile("\\#((?i)[0-9a-f]{4})").matcher(string); while (matcher.find()) { int codepoint = Integer.valueOf(matcher.group(1), 16); string = string.replaceAll(matcher.group(0), String.valueOf((char) codepoint)); } System.out.println(string); // blah a blah 

根据评论进行编辑 ,如果是单个标记,那么只需执行以下操作:

 String string = "0061"; char c = (char) Integer.parseInt(string, 16); System.out.println(c); // a 

\uXXXX是一个转义序列。 在执行之前它已经被转换为实际的字符值,它在运行时无论如何都不会被“评估”。

你可能想要做的是定义从#XXXX语法到Unicode代码点的映射并将它们转换为char