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”);