用Java强调文字

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从不计算真实的,不管我把我的字符串.

这是我正在尝试编写的完整程序.

McD*_*ell 6

应使用正确的编码编译代码:

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转义序列更好 - 它不那么模糊.

您还需要检查输入设备(文件/控制台/等).

作为最后的手段,您可以将您的chars 转储为十六进制,System.out.format("%04x", (int) c);并尝试使用角色检查器手动解码它们以找出它们是什么.


Tho*_*sen 5

要使Unicode字符工作,您必须确保javac以与编写时相同的编码读取它.

只需使用\ uXXXX表示法,您就可以省去很多麻烦.