我应该如何在Java中表示单个unicode字符?

时间:2017-04-05 16:32:42

标签: java unicode

我想在Java中表示一个Unicode字符。哪个原始或类适合于此?

请注意,我希望能够存储任何unicode字符,这对于2字节<div class="dropdown-trigger" (click)="contentToggle()"> <ng-content select="dropdown-trigger"></ng-content> </div> <div class="dropdown-content" *ngIf="showContent"> <ng-content select="dropdown-content"></ng-content> </div> 来说可能太大了。

2 个答案:

答案 0 :(得分:11)

char确实是16位a char corresponds to a UTF-16 code unit。不适合单个UTF-16代码单元的字符(例如Emojis)需要两个char s。

如果由于某种原因需要单独存储它们,可以使用int。对于Unicode中当前允许的所有0x10FFFF代码点,它有足够的空间(然后是一些空间)。这就是JDK使用的内容,例如Character.codePointAt(CharSequence seq, int index)String(int[] codePoints, int offset, int count)

无偿转换示例(live on ideone):

String s = "";
int emoji = Character.codePointAt(s, 0);
String unumber = "U+" + Integer.toHexString(emoji).toUpperCase();
System.out.println(s + "  is code point " + unumber);
String s2 = new String(new int[] { emoji }, 0, 1);
System.out.println("Code point " + unumber + " converted back to string: " + s2);
System.out.println("Successful round-trip? " + s.equals(s2));

输出:

  is code point U+1F602
Code point U+1F602 converted back to string: 
Successful round-trip? true

答案 1 :(得分:1)

取决于角色的定义:

如果您指的是一个 Unicode代码点,请使用int,它可以保存U + 0000到U + 1FFFFF的每个值。

但是,在某些情况下,显示为一个字符的内容会占用多个代码点。这在表情符号中尤为常见,例如

以最合乎逻辑的方式存储那些使用String