【问题标题】:Convert a unicode into it's actual chinese symbol in java在java中将unicode转换为实际的中文符号
【发布时间】:2020-08-20 08:01:00
【问题描述】:

我想把这个U+2E93转成java中对应的中文符号。我尝试使用这种方法。

String encoding = "UTF-8";
String cp = "U+2E93".subString(2);
int cpVal=Integer.parseInt(cp,16);
String tempString = Character.toString((char)cpVal);
byte[] bytes = tempString.getBytes(Charset.forName(encoding));
result = new String(bytes);

这在我的本地工作正常,默认字符集为 UTF-8,但不适用于默认字符集为 ISO-8859-1 的一个 linux VM。

【问题讨论】:

  • 当你说new String(bytes)时,你也应该把字符集放进去
  • String 转换为byte[] 只是将其转换回String 是没有意义的。使用原始的String 开头。

标签: java unicode character-encoding


【解决方案1】:

使用 Unicode 转义序列。

System.out.println("\u2E93");

如果您收到字符串形式的代码点,如问题所示,请这样做:

Java 11+

String cp = "U+2E93";
int codePoint = Integer.parseInt(cp.substring(2), 16);
String result = Character.toString(codePoint);
System.out.println(result);

Java 5+

String cp = "U+2E93";
int codePoint = Integer.parseInt(cp.substring(2), 16);
String result = new String(new int[] { codePoint }, 0, 1);
System.out.println(result);

输出(来自以上所有 3 个)


对于来自补充平面的字符,当使用字符串文字时,您需要提供 UTF-16 代理对

System.out.println("\uD83D\uDC4D");
String cp = "U+1F44D";
...

输出(来自两者)

?

【讨论】:

  • "使用 Unicode 转义序列。"值得指出的是,"\u2E93""⺓" 在 Java 源代码中出现时的处理方式相同:编译器将前者转换为后者作为编译代码的第一步。
  • @AndyTurner 仅当源文件是 UTF-8 或其他可以表示该字符的字符集时。无论源代码字符集如何,上述代码都有效。但是,有这个警告,好点。
  • @Andreas 我可以对任何 unicode 使用您的 Java5+ 解决方案吗?
  • @Nish 是的,我不明白为什么不这样做。
猜你喜欢
  • 1970-01-01
  • 2018-06-08
  • 2015-03-07
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2020-01-21
相关资源
最近更新 更多