现象

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. 和为K的子数组

    给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 . /** * @param {number[]} nums * @param {number} k ...

  2. 使用ts二次封装storage(sessionStorage/localStorage)

    export class LocalCache { setCache<T = any>(key: string, value: T): boolean; setCache<T = a ...

  3. OCR接口

    OCR基础框 import pytesseract from PIL import Image img = Image.open('实际数据1.jpeg') #具体位置截图 image1 = Imag ...

  4. 根据两点经纬度计算两点间距离 js

    getDistance(lat1, lng1, lat2, lng2) { let radLat1 = lat1 * Math.PI / 180.0; let radLat2 = lat2 * Mat ...

  5. Jenkins拉取GitHub上代码

    1.github 生成 Personal Access Token 2.github 设置 GitHub webhooks (具体需要持续集成的项目),新建或者设置现有项目的 webhooks 选项, ...

  6. Java反射解析注解

    package com.jeeplus.config; import javax.validation.constraints.Size; import java.lang.annotation.An ...

  7. rclone挂载对象存储到本地

    一.原理图 二.挂载步骤 1.申请对象存储资源 (略) 2.下载rclone https://rclone.org/downloads/ 3.上传服务器,解压并安装 sudo unzip rclone ...

  8. 【Python3+Selenium】基本操作

    一.环境准备 1.Selenium安装教程 1.1 打开cmd,输入如下命令:pip/pip3 install selenium 1.2 安装完成后查看Python路径包管理(Lib\site-pac ...

  9. Redis之Redis缓存管理机制

    Redis缓存管理机制 目录 Redis缓存管理机制 缓存过期 && 缓存淘汰 缓存穿透 && 布隆过滤器 缓存击穿 && 缓存雪崩 总结 彩蛋 从博客 ...

  10. darkriscv笔记

    1 按照默认设置,前4K空间为ROM,后4K空间是RAM.为什么RAM需要初值,初值从哪儿来? 2 指令分类 LUI: AUTPC: JAL: JALR: BCC : BEQ/BGE /BGEU/BL ...