如何将 Unicode 转换为 char

问题描述 投票:0回答:1

我想获取输入int对应的Unicode字符。您可以假设输入

int
在 Java 中可以表示为
char

java
1个回答
7
投票

tl;博士

Character.toString( 65 )

A

Character.toString( codePoint )

你说:

我想获取输入int对应的unicode字符

String character = Character.toString( codePoint ) ;

查看这些示例 在 IdeOne.com 上实时运行

System.out.println( Character.toString( 65 ) ) ;               // "A"

A

String faceWithMedicalMask = Character.toString( 128_567 ) ;  // "😷" = FACE WITH MEDICAL MASK.
System.out.println( FaceWithMedicalMask ) ;                   

😷

并非所有代码点都分配给编码字符。检查您输入的整数确实是有效的代码点

int codePoint = 128_567 ;
String faceWithMedicalMask = null ;
if( Character.isValidCodePoint( codePoint ) ) {
    faceWithMedicalMask = Character.toString( codePoint ) ;
} else {
    … deal with invalid code point
}

避免
char
Character
类型

你说:

您可以假设输入 int 在 java 中可以表示为 char。

不,你不能这么认为。

Unicode 中定义并受 Java 支持的 149,813 个字符中的大多数,不能用

char
类型表示。作为 16 位值,
char
物理上无能力。

自 Java 2 以来,

char
类型已基本被破坏,并被 Java 5+ 中添加的 code point 支持所取代。

int
铸造为
char

如果您违背我的建议,坚持使用

char
,那么您可以将
int
数字转换为
char
值。

char c = (char) 66 ; 
System.out.println( c ) ;

B

注意: 这只适用于 0 到 65,535 范围内的代码点。大多数 Unicode 字符的代码点超出该范围,最多为 1,114,111。

0 到 65,535 的范围在 Unicode 中被称为 基本多语言平面 (BMP)。 Java提供了一个方法来测试这个范围,

Character.isBmpCodePoint(int codePoint)
。您可以在演员之前检查:

if( Character.isBmpCodePoint( codePoint ) ) {
    char c = (char) 66 ; 
} else {
    … deal with input out of range
}

并非所有代码点都分配给编码字符。检查您输入的整数确实是有效的代码点

if( Character.isBmpCodePoint( codePoint ) ) {
    if( Character.isValidCodePoint( codePoint ) ) {
        char c = (char) 66 ; 
    } else {
        … deal with invalid code point
    }
} else {
    … deal with input out of range
}
© www.soinside.com 2019 - 2024. All rights reserved.