现象

public class Unicode
{
public static void main(String[] args)
{
// \u000d System.out.println("Hello World!");
// 会输出Hello World!
}
}

上面代码运行后会打印Hello World!

首先明确一点:注释中的代码是不会执行的,上面代码之所以执行,是因为\u000d被转义为换行符,变为如下形式。

public class Unicode
{
public static void main(String[] args)
{
//
System.out.println("Hello World!");
// 会输出Hello World!
}
}

为什么会发生这样现象呢,即注释中的Unicode字符也会被转义?

https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.3

用于Java编程语言的编译器(Java compiler)首先识别其输入中的Unicode转义,将ASCII字符\u以及紧跟其后的四个十六进制数字转换为UTF-16代码单元以获取所指示的十六进制值,并且传进的所有其他字符不变。

即Unicode解码在任何其他词汇解释之前(包括解释注释之前)

这样做的主要好处:在ASCII和任何其他编码之间来回转换变得很简单。

此外,也为平台独立性(支持的字符集的独立性)提供了基本保证,平台独立性一直是Java平台的主要目标。

但是这种设计带来的副作用就是:注释中的\u也会转义

设计初衷:允许在不同字符编码之间无损翻译Java源代码。如今有广泛的Unicode支持,但之前,西方国家的开发人员要从亚洲同时接收一些包含亚洲字符的源代码并不容易,需要进行一些更改(包括编译和测试)并将结果发送回去,而不会损坏任何内容。

因此,Java源码可以用任何编码编写,并允许在标识符、字符和string字串以及注释中使用各种字符,为了无损地传输,目标编码不支持的所有字符都被其Unicode转义符替代。

这个过程是可逆的,翻译可以不需要了解Java源码语法的任何工具完成,因为翻译规则不依赖于它。

首先搜索所有Unicode转义并将其替换为它代表的字符,然后解析结果文档,就好像Unicode转义不存在一样。

好处:易于指定,因此使规范更简单,并且易于实现。

缺点:注释中的\u也会转义

 注意

// \u000d System.out.println("Hello World!"); 会输出hello world!

\u000d,\\\u000d, \\\\\u000d 奇数个\都会转义

\\u000d, \\\\u000d 偶数个\不会转义

注释中的Unicode编码也会被转义的更多相关文章

  1. C#中文和UNICODE编码转换

    C#中文和UNICODE编码转换 //中文轉為UNICODE string str = "中文"; string outStr = ""; if (!strin ...

  2. String 字符串中含有 Unicode 编码时,转为UTF-8

    1.单纯的Unicode 转码 String a = "\u53ef\u4ee5\u6ce8\u518c"; a = new String(a.getBytes("UTF ...

  3. Python中的Unicode编码和UTF-8编码

    下午看廖雪峰的Python2.7教程,看到 字符串和编码 一节,有一点感受,结合崔庆才的Python博客 ,把这种感受记录下来: ASCII码:是用一个字节(8bit, 0-255)中的127个字母表 ...

  4. java中文和unicode编码相互转换(转)

    工具类代码如下: package aa.com; import java.io.UnsupportedEncodingException; public class UnicodeUtil { pub ...

  5. 常见中文字体在CSS中的Unicode编码(宋体:\5B8B\4F53)

    对于一个从事网页设计(也常说成DIV+CSS)的朋友来说,可能会遇到过这样的问题,就是在CSS里像这样设置某对象的字体:font-family:1.5em/1.75,’黑体’,Arial; 结果有些时 ...

  6. 从ord()中对Unicode编码的理解

    刚开始学习编程的时候,老对字符串编码的理解模模糊糊.也一直看这方便的资料,今天在看Dive in python时,突然有了新的理解(不知道是否正确). Python有个built-in函数ord(), ...

  7. Eclipse的application.properties文件输出中文成unicode编码

    今天添application.properties时,无法输入中文,输入的中文直接变成了unicode的编码形式.原因是Eclipse的Spring Properties文件的默认编码为iso-885 ...

  8. Eclipse的.properties文件输出中文成unicode编码

    今天添加log4j.properties时,无法输入中文,输入的中文直接变成了unicode的编码形式.原因是Eclipse的.properties文件的默认编码为iso-8859-1. 选择Wind ...

  9. python读取在文件中以unicode编码方式转成中文

    row='\u4E09\u56FD\u6F14\u4E49' eval("u"+"\'"+row+"\'")

  10. PHP中对汉字进行UNICODE编码和解码的实现

    <?php /** PHP中对汉字进行UNICODE编码和解码的实现 **/ class Helper_Tool{ //php中的unicode编码转中文 static function uni ...

随机推荐

  1. docker 实现原理

    实现原理 docker虚拟化 的核心是需要解决两个问题,资源隔离与资源限制 虚拟机是通过硬件虚拟化技术,通过一个 hypervisor 层实现对资源的彻底隔离 容器则是通过操作系统级别的虚拟化技术,利 ...

  2. csp-s2020 T2 动物园

    题目简述: 共有n个动物,m条要求,每条要求描述了第x位上是1的话,必须购买y饲料,动物园里已有的动物必须的饲料已经购买了,问题是:在不要求增加购买饲料的基础上,还能放进去多少种动物?共有k个二进制, ...

  3. linux check folder files how many files

    https://linuxhandbook.com/count-number-files/ tree -a

  4. 解决mysql使用sql文件不能还原数据库的问题

    来源:https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=109605 解决ERROR 1231 (42000): Variable ...

  5. SpringBoot(十五)单个以及多个跨域的配置方法

    同源策略是浏览器的一个安全限制,要求域名.协议.端口相同,如果不同则没办法进行数据交互.而跨域配置,则是为了解除这方面的限制.前后端分离的情况下,因为需要分开部署,后台开发基本都需要进行跨域配置了.( ...

  6. Linux系统root密码忘记修改

    重启Linux系统 到启动状态: 按任意键,进入GRUB菜单: 按字母e进入: 调整到上图,按字母e,进入 不进行删减,在后面输入" 1"(空格1),按回车,进入 或者将" ...

  7. 面试之arrayList扩容机制

    参考: ArrayList扩容详解_java编程艺术的博客-CSDN博客_arraylist扩容 ArrayList底层是数组elementData,用于存放插入的数据.初始大小是0,当有数据插入时, ...

  8. abap screen表格控件后续增加栏位

    当我们通过screen的表控件(含向导)创建完表格之后,后续想再增加栏位,要先把输入控件拖入表格控件内,再按钮控控件拖进去即可. 注:输入控件的名称和格式要和程序中的一致,否则会显示不出数据 效果图如 ...

  9. 【小记】copy 与 copy_backward

    copy 与 copy_backward copy 从前往后复制,result 参数指向目标容器的 begin 位置 copy*backward 从后往前复制,··· end 位置 Possible ...

  10. HarmonyOS基础

    目录 自适应布局 自适应拉伸布局 自适应缩放 自适应延伸 组件多态 ArkUI开发框架 基础组件 Text组件和Span组件 参考 参考:harmonyos3: 鸿蒙ArkUI eTS教程配套源码 参 ...