资讯详情

不一样的UniCode

不一样的UniCode

什么是UniCode

UniCode实际上是一种编码标准,又称万国码,单一码,是计算机科学领域的行业标准,Unicode它是为了解决传统字符编码方案的局限性而产生的。它为每种语言中的每个字符设置了统一和唯一的二进制编码,以满足跨语言和跨平台文本转换和处理的要求。

当我们开发跨平台时,我们可以使用它UniCode统一解决编码问题,UniCode仅限于解决编码问题吗?当然不是,UniCode花里胡哨也可以玩。

不一样的UniCode

看下面的案例,能输出什么值?

publicclassTestUniCode{ publicstaticvoidmain(String[]args){ inta=1; //\u000d\u0061\u002b\u002b\u003b System.out.println(a); } }  

这不是很简单吗?JAVA注释内容不会执行,所以必须打印出来a=1啊,这不可能有问题,但结果真的是这样吗?

显然,注释中的代码生效了。你怀疑生活了吗?JAVA代码可以用双斜杠注释。为什么双斜杠不起作用?

这就是UniCode的魅力了,编译过程中会将JAVA代码中的UniCode编码翻译成相应的字符。下面验证一波

publicclassTestUniCode1{ publicstaticvoidmain(String[]args){ System.out.println("5 10=\u0022 (5 10) \u0022"); } }  

根据句子,这里将被解释为字符串,即原始输出,但结果是

为什么?把上面的Java编译代码,检查编译后class文件

//编译后的class文件 publicclassTestUniCode1{ publicTestUniCode1(){ }  publicstaticvoidmain(String[]args){ System.out.println("5 10=15"); } }  

JAVA将代码中的UniCode翻译成相应的字符串,并将其翻译成相应的字符串\u0022翻译为双引号半边 ",相当于如下JAVA代码

System.out.println("5 10=" (5 10) "");  

除了我们\u除了0022,还有许多特殊的字符,如下所示

\u000a 换行符 \n \u0022 双引号半边 "
\u000d 回车符 \r \u002b 加号
\u007d 右半部分的大括号 } \u003b 分号 ;
\u007b 左半部分的大括号 { \u0061 – \u007a 字符 a-z
\u0041 – \u005a 字符 A-Z

因此,这也可以解释上述第一个问题,为什么输出a=2呢?

首先,我们可以根据对照表知道\u000d为回车符\r,也就是说,如果车回到双斜杠后面,后面的车UniCode是什么?这个可以借助一些网络UniCode可参考在线翻译工具https://c.runoob.com/front-end/3602/

我们可以清楚地看到后面的代码a ;所以一切都很清楚,我们可以a=2代码等价翻译如下所示

publicstaticvoidmain(String[]args){ inta=1; // a  ; System.out.println("==结果打印==" a); }  

其它有趣的案例

除上述案例外,还有几个供您参考

案例一

publicstaticvoidmain(String[]args){ if(false==true){ //\u000a\u007d\u007b //换行符右半部分的大括号}左半部分的大括号{ System.out.println("false为真了!!!!"); } } ================================== //输出结果:false为真 //代码型如 System.out.println("false为真了!!!");  

案例二

字符混淆

publicstaticvoidmain(String[]args){ //\u0022双引号半边" System.out.println("a\u0022.length() \u0022b".length()); } ================================== //nbsp;输出结果:2
// 代码型如:System.out.println("a".length() + "b".length());

总结

UniCode在开发中可以统一编码,但我们操作的时候一定需要注意特殊字符的转换,一旦不小心在注释中加了特殊UniCode字符,就有可能导致业务错乱,这样就相当于在代码里面下毒了,相当于给自己埋坑。

标签: 007b2ln传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台