java中,需要使用到编码与解码的情景

常见的编码表

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

 

编码过程:把看得懂的变成看不懂的
解码过程:把看不懂的变成看得懂的

 

在我们Java中定义了一个String,其编码方式是啥?
字符串实际上就是一个char数组。那么Char的编码,其实就是字符串的编码。那么Char是什么编码呢?Java中的String默认使用的是Unicode编码。
Unicode是一中编码,所谓的编码就是一个编号到字符的一种映射关系,就仅仅是一对一的映射关系而已。

编码和编码格式的区别是什么?
1.Unicode 是一种编码,所谓的编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射关系而已。
2. GBK、UTF-8是一种编码格式,是用来序列化或存储上述的(编号或者数字)的一种“格式”.

 

编码和编码格式:*java的String使用的编码的Unicode,当String存在于内存中的时候,是“只有编码没有编码格式的”,所以java程序中的任何String对象,说它是GBK或者UTF-8都是错的。String在内存中是不存在编码格式*的,它只是一个Unicode的一个字符而已。
当字符串需要在网络中传输或者要被写入文件的是时候,就需要编码格式了。乱码的问题也因此出现了。

 

GBK 和 UTF-8:GBK 和 UTF-8 都是用来序列化或存储 Unicode 编码的数据的,但是分别是2中不同的格式,他们都是 Unicode 的实现方式。

 

ASCII码 和 Unicode:ASCII 和 Unicode一样也是一种编码,只不过这两种编码能编码的范围不同,Unicode 能编码的范围要更大一些,几乎能覆盖现存的所有字符。

 

Java中一些编解码的常见使用


1.流读取文件,具有转换编码功能的有:OutputStreamWriter 和 InputStreamReader

构造器如下:

// 创建指定字符集的 InputStreamReader
InputStreamReader(InputStream in, String CharsetName)
// 创建使用指定字符集的 OutputStreamWriter
OutputStreamWriter(OutputStream out, String CharsetName)

 

 

2.处理字符串编码问题

 

//a. 重新对获取的字符串进行编码
Byte[] bytes = str.getBytes(String encodeCharName);

//b. 重新对bytes进行编码,创建新的字符串对象
str = new String(Byte[] bytes, String decodeCharsetName);

//例如:
// 一般上面的编码和解码的方式需要结合使用 str = new String(str.getBytes(String encodeName), String decodeCharsetName);
//在JavaWweb中, 在客户端传入的参数中涉及到汉字等, 就需要进行编码和解码的操作, 通常使用下面的编码和解码的方式 // 1:按照ISO-8859-1把乱码恢复成二进制形式 byte[] data = req.getParameter("paraName").getBytes("ISO-8859-1"); // 2:再把二进制形式的数据使用UTF-8重新编码 String paraName = new String(data, "UTF-8");

 

 

3.处理请求参数传递编码问题

 

//对字符串进行编码
java中编码:URLEncoder.encode(strUri, “UTF-8”);
//对字符串进行解码
java中解码:URLDecoder.decode(strUri, “UTF-8”);


 

posted @ 2021-12-14 19:34  nicholasm4  阅读(89)  评论(0编辑  收藏  举报