Java字符编码

目录

字符编码介绍

字符编码(1)

字符编码(2)

字符编码(3)

字符编码(4)

Java的字符编码与相关类:

Java字符编码

Java字符相关类的代码实践

总结


 

字符编码介绍

字符编码(1)

- 字符:0,a,我,1,の,...

- 计算机只用0和1,1bit(0或1)

- ASCII码(American Standard Code for Information Interchange)

  • 美国信息交换标准代码,奠定计算机编码基础
  • 用一个字节(1 Byte=8 bits) 来存储a-z,A-Z,0-9和一些常用符号
  • 用于显示英语及西欧语言
  • 回车键(13, 00001101), 0(48, 00110000), A(65,01000001), a(97, 01100001),...

字符编码(2)

- ASCII编码采用1 Byte,8 bits,最多256个字符

- ASCII无法适应其他地方,如汉字数量有十几万

所以便有了扩展编码库(加字节),如下:

  • ISO8859(1-15) 西欧语言
  • GB2132,GBK,GB18030(相当于是ASCII+中文)
       - GB18030 > GBK > GB2312(汉字数量)
  • Big5(相当于是ASCII+繁中)
  • Shift_JIS(相当于是ASCII+日文)
  • ......
  • Unicode编码(下面介绍)

字符编码(3)

  • Unicode(字符集)

        - 目标:不断扩充,存储全世界所有的字符

  • 编码方案

        - UTF-8,兼容ASCII,变长(1-4个字节存储字符),经济,方便传输(最常用)

        - UTF-16,用 变长(2-4个字节)来存储所有字符(Java内部采用的编码格式

        - UTF-32,用32bits(4个字节)存储所有字符

字符编码(4)

  • ANSI编码

        – Windows上非Unicode的默认编码(Windows code pages)

        – 在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码

        – 在繁体中文Windows操作系统中,ANSI编码代表Big5

        -- 记事本默认是采用ANSI保存

Java的字符编码与相关类:

Java字符编码

  • 源文件编码:采用UTF-8编码
    – Eclipse,右键 项目/Java文件,属性,resource,选择UTF-8
  • 程序内部采用UTF-16编码存储所有字符(不是程序员控制)
  • 和外界(文本文件)的输入输出尽量采用UTF-8编码

Java字符相关类的代码实践

  • 获取当前默认字符集
    public static void main(String[] args) {
    		//默认字符集 GBK
    		Charset c = Charset.defaultCharset();
    		System.out.println(c.name());
    		
    		//输出所有的支持字符集
    		SortedMap<String, Charset> sm = Charset.availableCharsets();  
            Set<String> keyset = sm.keySet();  
            System.out.println("Java 支持的所有字符集");  
            for (String s : keyset) {  
                System.out.println(s);  
            }  
    	}

  • 编码转换和解码

        先用UTF-8编码格式将一个字符串(a)编码成字节数组,再将该字节数组以GBK的编码形式给解码成一个字符串,结果出来的结果是乱码的

        然后再将乱码的结果(b)以GBK的编码格式编码成一个字节数组,最后再以UTF-8的形式将这个字节数组解码,发现还是乱码的

import java.io.UnsupportedEncodingException;

public class StringTest {

	public static void main(String[] args) throws UnsupportedEncodingException {
		String a = "我是中国人 ";		
		String b = new String(a.getBytes("UTF-8"), "GBK");
		/**getBytes方法先将变量 a 中的字符串以UTF-8的编码格式转化成字节;
		*而这里的new String( byte[] bytes, String char )构造方法会以第二个参数 char 给出
		*的编码格式来解码字节数组 bytes ,然后返回解码后的字符串并赋给变量 b
		*/
		
		System.out.println(b);
		
		String c = new String(b.getBytes("GBK"), "UTF-8");
		System.out.println(c);
		
	}

}

输出结果图 ->:

 

总结

编码格式最好以UTF-8为主

和外界的输入输出最好都用同一种编码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值