Osc*_*Ryz 2 java unicode literals
我尝试在Java中为强调的元音键入char文字,但编译器说的是:unclosed character literal
这就是我想要做的:
char [] a = {'à', 'á', 'â', 'ä' };
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Unicode '\u00E0'
但由于某些原因它们与我的代码不匹配:
for( char c : string.toCharArray() ) {
if( c == a[i] ) {
// I've found a funny letter
}
}
Run Code Online (Sandbox Code Playgroud)
在if
从不计算真实的,不管我把我的字符串.
这是我正在尝试编写的完整程序.
应使用正确的编码编译代码:
javac -encoding UTF-8 Foo.java
Run Code Online (Sandbox Code Playgroud)
某处会出现编码不匹配的情况.
public class Foo {
char [] a = {'à', 'á', 'â', 'ä' };
}
Run Code Online (Sandbox Code Playgroud)
保存为UTF-8的上述代码应该成为十六进制转储:
70 75 62 6C 69 63 20 63 6C 61 73 73 20 46 6F 6F public class Foo
20 7B 0D 0A 20 20 63 68 61 72 20 5B 5D 20 61 20 {__ char [] a
3D 20 7B 27 C3 A0 27 2C 20 27 C3 A1 27 2C 20 27 = {'__', '__', '
C3 A2 27 2C 20 27 C3 A4 27 20 7D 3B 20 20 0D 0A __', '__' }; __
7D 0D 0A 0D 0A }____
Run Code Online (Sandbox Code Playgroud)
代码点U + 00E0(à)的UTF-8值是C3 A0
.
应使用正确的编码编译代码:
javac -encoding UTF-8 Foo.java
Run Code Online (Sandbox Code Playgroud)
有一个外部机会,à将由组合序列U + 0061 U + 0300表示.这是NFD表单(我从未遇到过将其用作文本输入默认值的文本编辑器).正如ThorbjørnRavnAndersen指出的那样,总是使用\ uXXXX转义序列更好 - 它不那么模糊.
您还需要检查输入设备(文件/控制台/等).
作为最后的手段,您可以将您的char
s 转储为十六进制,System.out.format("%04x", (int) c);
并尝试使用角色检查器手动解码它们以找出它们是什么.
归档时间: |
|
查看次数: |
1761 次 |
最近记录: |