Java中的Unicode转义语法

时间:2014-02-03 08:36:30

标签: java unicode

在Java中,我了解到以下语法可用于提及键盘上没有的Unicode字符(例如非ASCII字符):

(\u)(u)*(HexDigit)(HexDigit)(HexDigit)(HexDigit)

我的问题是: 在上面的语法中(u)*的目的是什么?

我理解的一个用例代表Java中的日元符号:

char ch = '\u00A5';

2 个答案:

答案 0 :(得分:15)

有趣的问题。 Section 3.3 of the JSL says

UnicodeEscape:
    \ UnicodeMarker HexDigit HexDigit HexDigit HexDigit

UnicodeMarker:
    u
    UnicodeMarker u

转换为\\u+\p{XDigit}{4}

  

如果符合条件的\后跟u,或者多个u,并且最后一个u后面没有四个十六进制数字,则会发生编译时错误。

所以你是对的,反斜杠之后可以有一个或多个u。原因进一步说明了:

  

Java编程语言指定了一种将用Unicode编写的程序转换为ASCII的标准方法,该程序将程序更改为可由基于ASCII的工具处理的形式。转换涉及通过添加额外的u来将程序源文本中的任何Unicode转义转换为ASCII - 例如,\ uxxxx变为\ uuxxxx - 同时将源文本中的非ASCII字符转换为包含单个u的Unicode转义符

     

这个转换版本同样可以被Java编译器接受,并代表完全相同的程序。稍后可以通过将存在多个u的每个转义序列转换为一个较少u的Unicode字符序列,同时将每个转义序列用单个u转换为相应的单个Unicode字符,从此ASCII格式恢复确切的Unicode源。

所以这个输入

 \u0020ä

变为

 \uu0020\u00e4

第一个uu表示“这是一个以”开头的unicode转义序列“,而第二个u表示”自动工具将非ASCII字符转换为unicode转义。“

当您想要从ASCII转换回unicode时,此信息非常有用:您可以尽可能多地恢复原始代码。

答案 1 :(得分:0)

这意味着您可以根据需要添加任意数量的u - 例如,这些行是等效的:

char ch = '\u00A5';
char ch = '\uuuuu00A5';
char ch = '\uuuuuuuuuuuuuuuuuu00A5';

(和所有编译)