java字符串编解码知识点

本文详细介绍了Java中字符串的内部表示,强调Unicode编码与GBK、UTF-8等编码格式的区别。通过示例展示了乱码产生的原因及判断方法,并提供了解决乱码问题的策略。同时,列举了常见的字符编码,如ASCII、ISO8859-1、GBK、UTF-8和Unicode等。
摘要由CSDN通过智能技术生成

基础知识

字符串内部表示

Unicode 是一种编码,所谓的编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射关系而已。 GBK、UTF-8是一种编码格式,是用来序列化或存储上述的(编号或者数字)的一种“格式”。 编码和编码格式:java的String使用的编码的Unicode,当String存在于内存中的时候,是“只有编码没有编码格式的”,所以java程序中的任何String对象,说它是GBK或者UTF-8都是错的。String在内存中是不存在编码格式*的,它只是一个Unicode的一个字符而已。 如果源码文件是某种编码, 操作系统默认的环境编码为这种编码,那么编译时, JVM将按照这种编码将字节数组解析成字符,然后将字符转换为unicode格式的字节数组,作为内部存储。

乱码的原因

由于字符串原本的编码格式与读取时解析用的编码格式不一致。

判断如何造成乱码的方法

		String s = "你好哦!";
        System.out.println( new String(s.getBytes(), StandardCharsets.UTF_8));
        System.out.println( new String(s.getBytes(), "GBK"));
        System.out.println( new String(s.getBytes(), StandardCharsets.ISO_8859_1));
        System.out.println( new String(s.getBytes("GBK"), StandardCharsets.UTF_8));
        System.out.println( new String(s.getBytes("GBK"), "GBK"));
        System.out.println( new String(s.getBytes("GBK"), StandardCharsets.ISO_8859_1));
	

//操作系统默认编码为UTF-8,输出为
		你好哦!
		浣犲ソ鍝�!
		ä½ å¥½å¦!
		���Ŷ!
		你好哦!
		ÄãºÃŶ! 

解决乱码的方法

//判断出是如何造成现在的乱码后
//如:是因为  new String(s.getBytes("GBK"), StandardCharsets.UTF_8)  (���Ŷ!)
//则反向编码,可以使最后还原
String s = "你好哦!我很好";
String gbk = new String(s.getBytes(StandardCharsets.UTF_8), "GBK");
System.out.println(gbk);//浣犲ソ鍝︼紒鎴戝緢濂�
String utf = new String(gbk.getBytes("GBK"), StandardCharsets.UTF_8);
System.out.println(utf);//你好哦!我很�?

​ 还是可能会错

s.getBytes()

将unicode 转换为操作系统默认的格式的字节数组 可指定编码:s.getBytes("GBK")

new String (bytes, Charset)

charset是指定读取bytes的方式,这里指定为UTF-8,即把bytes的内容当做UTF-8格式对待。

常见编码

ASCII:美国标准信息交换表
ISO8859-1:拉丁码表,欧洲码表
GB2312:中国的中文编码表
GBK:中国的中文编码表升级
GB18030:GBK的取代版本
BIG5:通用于香港、台湾地区的繁体字编码方案
UTF-8:最多用3个子节表示一个字符
Unicode:国际标准码,融合了多种文字,所有的文字都用两个子节来表示,Java语言使用的就是该码表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值