Java与Unicode

最早学习Java的时候,老师会告诉我们。

Java中的字符是用Unicode编码的。Unicode编码每个字符占两个字节。


老师说的对,但是介绍的并不够全面和准确。

简单点来说,Unicode编码系统分为编码和实现。


编码指的是,每个字符对应的Unicode码是唯一确定的,Unicode用两个字节表示一个字符。

Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。相信大家都应该知道utf-8,utf-16,utf-32等等的吧。

因为,在实际操作中(如:传输,存储),我们因为一些特殊的要求(提高性能)。对Unicode会有很多种实现方式。

举一个小小的例子

例如,如果一个仅包含基本7位ASCIII字符的Unicode文件,如果每个字符都使用2字节的原Unicode编码传输,其第一字节的8位始终为0。这就造成了比较大的浪费。对于这种情况,可以使用UTF-8编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他Unicode字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。这样对以7位ASCII字符为主的西文文档就大大节省了编码长度


因为Java中char型占两个字节,JVM对Unicode的实现应该是UTF-16吧,具体大端序,小端序应该跟平台有关(个人猜测)。



上面是一些基础知识的普及,下面就比较娱乐了。


Java中支持对Unicode的转义

格式为\u+四位十六进制数。

如a的Unicode编码为0061

那么System.out.println("\u0061");就会输出a


那么如何知道一个字符的Unicode码呢?

		char c = '持';
		System.out.println(Integer.toHexString(c));

那么如何知道某个Unicode码是什么字符呢?

System.out.println((char)Integer.parseInt("6301", 16));

挺有意思吧?


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值