【发布时间】:2017-06-26 04:54:52
【问题描述】:
我正在学习 java,我发现在 java 中 char 的范围是 0-65536,而 java 使用 Unicode 来表示字符。因此,我运行以下代码来查看所有字符是什么:
class A{
public static void main(String args[]){
char x=0;
for(int i=0;i<65536;i++){
x++;
System.out.println(i + "th character is: " + x);
}
}
}
我发现的是:-
前 126 个字符与 ASCII 字符相同。
在第 126 个字符之后只显示“?”标记。
输出:-
...
第 127 个字符是:?
第 128 个字符是:?
第 129 个字符是:?
第 130 个字符是:?
第 131 个字符是:?
第 132 个字符是:?
第 133 个字符是:?
...
第 65534 个字符是:?
我的问题是为什么它显示“?”标记而不是 Unicode 字符。
【问题讨论】:
-
id 说他们只是无法显示
-
您的控制台编码设置不正确
-
@AbhinavKumar:您需要在控制台中配置一种能够显示这些字符的字体(您可能还需要使用
chcp 65001将命令行编码更改为UTF8) -
某些 Unicode characters 需要两个 UTF-16 代码单元 (
char)。因此,要遍历所有这些(包括未分配、私人使用等),请转到Character.MIN_CODE_POINT到Character.MAX_CODE_POINT除非<Character.MAX_SURROGATE && Character.isSurrogate((char)i) -
@TomBlodget:这也意味着需要 UTF-16 代理项(U+10000 到 U+10FFFF)的 Unicode 代码点必须使用
String或char[]而不是单个 @987654330 输出@。使用Character.toChars(int)将 Unicode 代码点转换为有效的 UTF-16char[]序列,然后您可以根据需要将char[]转换为String。