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) "");
其实我们除了\u0022外,还有很多特殊字符,对照表如下所示
Unicode转义字符含义Unicode转义字符含义\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());
}
==================================
//输出结果:2
//代码型如:System.out.println("a".length() "b".length());
UniCode在开发中可以统一编码,但我们操作的时候一定需要注意特殊字符的转换,一旦不小心在注释中加了特殊UniCode字符,就有可能导致业务错乱,这样就相当于在代码里面下毒了,相当于给自己埋坑。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com