Java中的Unicode到字符串转换

时间:2009-12-20 04:25:10

标签: java unicode string

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

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

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

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

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

4 个答案:

答案 0 :(得分:11)

去掉'#'并使用Integer.parseInt("0061", 16)将十六进制数字转换为int。然后转为char

(如果你手动实现了词法分析器,或者当你的词法分析器匹配unicode文字时,可以动态地进行转换。但是在重新阅读问题时,我看到你正在使用词法分析器...好动!)

答案 1 :(得分:2)

您需要将特定代码点转换为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

答案 2 :(得分:2)

  我基本上试图转换   通过提供unicode到一个角色   只有'0061'的方法,帮助。

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

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

答案 3 :(得分:0)

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

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