浅谈Java中的编码理论
创始人
2024-03-26 21:01:57
0

Java是使用Unicode字符集的,意思是在内存运行的时候是这样的。当Java源程序被编译为.class文件的时候,是以UTF-8字符集存储字符的。比如字符串"汉语"的Unicode字符为:0x49 6C ED 8B。在.class文件中则变成了:0xE6 B1 89 E8 AF AD 0D 0A。实际上如果用以下程序输出“汉语”二个字的16进制字节序列:

        String str = "汉语";

        try{
              byte[] b = str.getBytes("Unicode");
              for(int i : b){
              System.out.println(Integer.toHexString(i));
        }       
        }catch(Exception ex){
              ex.printStackTrace();  }

会发现,实际输出的是 0xFE FF 6C 49 8B ED。多出来的0xFE FF,是Unicode字符串的BOM(Byte Order Mark)。但是为什么输出的顺序(0xFE FF 6C 49 8B ED)和文件中的顺序不一致(0xFF FE 49 6C ED 8B)?

public byte[] getBytes(Charset charset) 使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。如果不指定参数,则使用系统默认的字符集,对于简体中文系统一般为GBK。

看程序:

class EncodingExer 
{
    public static void main(String[] args)
    {
          String str = "汉语";               //GBK编码为: 0xBABA 0xD3EF
          byte[] b = str.getBytes();     
          for(int i : b){
              System.out.println(Integer.toHexString(i)); //0xBA 0xBA 0xD3 0xEF
          }    }}

在这个过程中,由Unicode字符得到字符串“汉语”,然后解码得到了GBK字节序列。与String.getBytes()相对应的是new String(byte[] bytes,Charset charset),它的作用是用字节序列生成字符串。如果想由刚才的GBK字节序列得到原来的字符串“汉语”,我们需要做的是:new String(b) 就可以了。将b按照GBK编码得到字符串“汉语”,然后转化为Unicode字符。如果是str.getBytes("iso-8859-1"),那么还原的时候就是new String(b,"iso-8859-1")。总之就是用什么方式编码,就用什么方式解码。

【编辑推荐】

  1. Java语言中抽象类和接口的区别
  2. 痛批Java十大最无用特性
  3. 深入探索Java工作原理:JVM,内存回收及其他

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...