java字符编码

要了解java的字符编码首先要弄清楚几个概念:
字符: 人们使用的记号,抽象意义上的一个符号
字节: 一个八位的计算机存储空间
字符串: 多个字符的表现形式。

字符集: 定义了那些字符能够被表示。表达了一个范围。
编码  :规定了每个字符的存储方式。

通常所说的 UNICODE 是一个字符集。
          UTF-8 等 就是UNICODE的一种编码方式。

Java 中,字符串类 java.lang.String 处理的是 UNICODE 字符串,可以这么理解java中所有的字符串都以unincode作为它的内码存在:
假设我的java文件是以utf-8保存的:

Java代码 复制代码
  1.      //打印出字符串在java中表示的“内码” unicode 字符编号   
  2. public static void printStrCoding(String st){   
  3.       for(int i=0;i<st.length();i++){   
  4.            int j=(int)st.charAt(i);   
  5.            System.out.println( Integer.toHexString(j));   
  6.               
  7.        }   
  8. }  
      //打印出字符串在java中表示的“内码” unicode 字符编号   public static void printStrCoding(String st){         for(int i=0;i<st.length();i++){           int j=(int)st.charAt(i);           System.out.println( Integer.toHexString(j));                     }   }    


Java代码 复制代码
  1.   String name="中文";   
  2.   System.out.println(name.length());  // 打印出2   
  3.      
  4.   byte[] bytes= name.getBytes("UTF-8" );   
  5.      
  6.   System.out.println(bytes.length);  //打印出 6    
  7.   for(int i =0;i<bytes.length;i++){   
  8.    int j=(int) bytes[i];   
  9.    System.out.println("coding: ------------------"+Integer.toHexString(j));   
  10.   }   
  11.  // utf-8 编码   
  12.  // coding: ------------------ffffffb8   
  13.  // coding: ------------------ffffffad   
  14.  // coding: ------------------ffffffe6   
  15. //  coding: ------------------ffffff96   
  16.  // coding: ------------------ffffff87   
  17.      
  18.      
  19.   printStrCoding(name);   
  20.  //unicode 字符编号   
  21.  //4e2d   
  22.  //6587  
       String name="中文";         System.out.println(name.length());  // 打印出2                  byte[] bytes= name.getBytes("UTF-8" );                  System.out.println(bytes.length);  //打印出 6          for(int i =0;i<bytes.length;i++){          int j=(int) bytes[i];          System.out.println("coding: ------------------"+Integer.toHexString(j));         }        // utf-8 编码        // coding: ------------------ffffffb8        // coding: ------------------ffffffad        // coding: ------------------ffffffe6       //  coding: ------------------ffffff96        // coding: ------------------ffffff87                           printStrCoding(name);        //unicode 字符编号        //4e2d        //6587  


另外做个测试,将中文两个字以GB2312编码保存在文件中:
Java代码 复制代码
  1.  File f= new File("/home/linwei007/temp/aa");   
  2.  BufferedReader in = new BufferedReader(new FileReader(f));   
  3.     
  4.  String rs=in.readLine();  //读取中文两个字   
  5.     
  6.     
  7.  System.out.println("coding: ------------------"+rs);  //打印出乱马   
  8.  printStrCoding(rs);  //打印结果明显java不认识此字符   
  9.     
  10.  bytes= name.getBytes("GB2312" );   //以此编码取得字节串   
  11.  System.out.println(bytes.length);  //打印出2   
  12.  for(int i =0;i<bytes.length;i++){   
  13.   int j=(int) bytes[i];   
  14.   System.out.println("coding: ------------------"+Integer.toHexString(j));   
  15.  }   
  16.  //GB2312的编码:   
  17.  //coding: ------------------ffffffd6   
  18.  //coding: ------------------ffffffd0   
  19.  //coding: ------------------ffffffce   
  20.  //coding: ------------------ffffffc4   
  21.     
  22.  String newString= new String(bytes,"GB2312");   
  23.  System.out.println("coding: ------------------"+newString);   
  24.  //打印出正确的中文.          
  25.   
  26.  printStrCoding(newString);   
  27. //unicode 字符编号   
  28. //4e2d   
  29. //6587  
       File f= new File("/home/linwei007/temp/aa");         BufferedReader in = new BufferedReader(new FileReader(f));                  String rs=in.readLine();  //读取中文两个字                           System.out.println("coding: ------------------"+rs);  //打印出乱马         printStrCoding(rs);  //打印结果明显java不认识此字符                  bytes= name.getBytes("GB2312" );   //以此编码取得字节串         System.out.println(bytes.length);  //打印出2         for(int i =0;i<bytes.length;i++){          int j=(int) bytes[i];          System.out.println("coding: ------------------"+Integer.toHexString(j));         }         //GB2312的编码:         //coding: ------------------ffffffd6         //coding: ------------------ffffffd0         //coding: ------------------ffffffce         //coding: ------------------ffffffc4                  String newString= new String(bytes,"GB2312");         System.out.println("coding: ------------------"+newString);         //打印出正确的中文.                  printStrCoding(newString);        //unicode 字符编号        //4e2d        //6587  


  很明显无论那种编码,只要字符相同 它在java中的 unicode的字符编号是相同的。关键是要用正确的编码去读写。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值