现象

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. IaaS--云虚拟机(二)(何恺铎《深入浅出云计算》笔记整理)

    [如何挑选合适的虚拟机型号] 1.根据类型.云厂商会提供均衡型.计算密集型.内存优化型.图形计算型等常见的虚拟机类型.这些类型对应着硬件资源的某种合理配比或针对性强化,方便你在面向不同场景时,选择最合 ...

  2. GCC gcc 和g++

    GCC:GNU Compiler Collection(GUN编译器集合),它可以编译C,C++,Java,Fortran,Pascal,Object-C等语言. gcc是GCC中的GUN C Com ...

  3. VSCode+EIDE开发CH32V系列RISC-V MCU

    VSCode+EIDE开发CH32V系列RISC-V MCU 1. VS Code Visual Studion Code (VS Code),是一款由微软开发且跨平台的免费源代码编辑器.该软件支持语 ...

  4. python的开发工具pycharm的安装

    如何下载 如何安装 如何配置环境 (mac和win版本) Pycharm的安装与配置以及汉化 一.pycharm的安装与配置(一定要去pycharm的官网去下载哦!) 1.最受欢迎的开发工具pycha ...

  5. linux 创建 挂载 ntfs分区

    格式化为ntf分区 先用fdisk创建分区 格式化 mkfs.ntfs -f /dev/sda2 挂载 zxd@x79:~$ cat /etc/fstab# /etc/fstab: static fi ...

  6. cpp chrono basic

    // cpp 20 //c++ - Number of seconds since midnight - Stack Overflow //https://stackoverflow.com/ques ...

  7. goland使用go mod模式

    使用go mod之后,想要在goland中有代码提示,有两种方式,一种是使用gopath下的goimport工具,另一种是使用gomod自身的管理工具 我是用的是非gopath的方式,每次新建项目后总 ...

  8. Finance财务软件(如何运行该软件)

    下载软件 首先,去gitHub下载该项目的release,尽量下载最新版本:https://github.com/edwardorchis/finance/releases.国内也可以在码云下载htt ...

  9. python中如何获取主机的ip和主机名

    使用python中的socket库,可以轻松获取主机ip和主机名. 一.获取主机名 import socket hostname = socket.gethostname() print(hostna ...

  10. C++ 11 std::mem_fn

    mem_fn 想到member function 成员函数 这还真就是用来调用成员函数的 普通的函数我们通过函数指针可以调用,但对于成员函数的调用稍微复杂一点,需要对象,也即this指针 因为成员函数 ...