首页 > 自考资讯 > 自考知识

不一样的UniCode

头条共创 2024-08-06

不一样的UniCode

什么是UniCode

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

我们在跨平台开发时就可以采用UniCode统一解决编码问题,那么UniCode仅限于解决编码问题吗?当然绝对不是,UniCode还可以玩的花里胡哨。

不一样的UniCode

看下面一个案例,到底能输出什么值呢?

public class TestUniCode {    public static void main(String[] args) {        int a=1;        // \u000d \u0061\u002b\u002b\u003b        System.out.println(a);    }}

这个明眼一看,这不是非常简单吗?JAVA并不会执行注释内容,所以打印出来的肯定是a=1啊,这个不可能有问题啊,但是结果真是这样吗?

结果展示

显然是注释中的代码生效了,这样是不是有点怀疑人生了,明明JAVA代码可以采用双斜杠注释,为什么双斜杠会没有生效呢?

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

public class TestUniCode1 {    public static void main(String[] args) {        System.out.println("5 + 10 = \u0022+ (5+10) + \u0022");    }}

按照语句这里都会被解释为字符串也就是原样输出,可结果是

为什么呢?将上面的Java代码进行编译,查看编译后的class文件

// 编译后的class文件public class TestUniCode1 {    public TestUniCode1() {    }    public static void main(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的代码等价翻译如下所示

public static void main(String[] args) {    int a=1;    //    a++;    System.out.println("==结果打印=="+a);}

其它好玩的案例

除了上面提到的一个案例外,还有几个给大家参考

案例一

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

案例二

字符混淆

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

总结

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

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

猜你喜欢

  • 不一样的UniCode

    不一样的UniCode

    不一样的UniCode什么是UniCodeUniCode其实是一种编码标准,也被称为万国码,单一码,

    来源:中国自考网 2024-08-06
  • 全球十大卫浴品牌排行榜2021,卫浴世界排名前十

    全球十大卫浴品牌排行榜2021,卫浴世界排名前十

    一、美国 - 科勒(Kohler)品牌介绍:科勒成立于 1873 年,由约翰·麦克·科勒(John

    来源:中国自考网 2024-08-06
  • UTF8 和 Unicode 的区别

    UTF8 和 Unicode 的区别

    作者:拉丁吴utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很

    来源:中国自考网 2024-08-06
  • 十大卫浴品牌排2020,十大卫浴牌子

    十大卫浴品牌排2020,十大卫浴牌子

    十大卫浴品牌排行榜:洁具品牌推荐在家居装修中,卫浴设备的选择至关重要。优质的卫浴品牌不仅能提升生活品

    来源:中国自考网 2024-08-06
  • 关于Unicode,看这一篇就够了

    关于Unicode,看这一篇就够了

    无论是用Python还是其它语言,处理字符编码都是一件极其痛苦的事情。我们无法忘记被UnicodeD

    来源:中国自考网 2024-08-06
  • 全国卫浴排行榜,全国卫浴十大名牌排名

    全国卫浴排行榜,全国卫浴十大名牌排名

    每个家庭都离不开卫浴洁具,而且使用频率很高,所以卫浴洁具的好坏居家生活的影响是很大的。很多人在购买卫

    来源:中国自考网 2024-08-06
  • Unicode介绍

    Unicode介绍

    Unicode是一种通用的字符编码标准,旨在为世界上所有脚本和语言中的每个字符提供一个唯一的数值标识

    来源:中国自考网 2024-08-06
  • 卫浴洁具顶级品牌,洁具卫浴10大品牌排序

    卫浴洁具顶级品牌,洁具卫浴10大品牌排序

    2024年卫浴品牌排行榜:十大洁具品牌排名在激烈竞争的卫浴市场中,选择合适的品牌至关重要。以下是20

    来源:中国自考网 2024-08-06
  • 5分钟读懂Unicode

    5分钟读懂Unicode

    更多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)Unicode是涵盖世界上大多数书写

    来源:中国自考网 2024-08-06
  • 卫校招生有什么要求,读卫校条件

    卫校招生有什么要求,读卫校条件

    到目前为止卫校任然是初中毕业生填报的热门专业之一,卫校开设的专业不仅仅适合女孩子耶适合大多数男孩子,

    来源:中国自考网 2024-08-06