Java中的Unicode转义语法

 changmao三顾茅庐 发布于 2023-01-29 17:55

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

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

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

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

char ch = '\u00A5';

Aaron Digull.. 15

有趣的问题.JSL第3.3节说:

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 个回答
  • 有趣的问题.JSL第3.3节说:

    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时,此信息非常有用:您可以尽可能多地恢复原始代码.

    2023-01-29 17:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有