计算机中的编码和解码
计算中信息的表示是通过二进制01字节流。编码方式即为不同的二进制通过转换所表示出来的特定信息(不同的编码方式均有特定的规则)
符号集:ASCII只可表示128个符号。其他的文字符号ASCII无法表示。Unicode为其中一种字符集,该字符集包含了世界上所有的符号。
Unicode规定了符号的二进制格式,但是没有固定编码格式(二进制格式如何存储)。于是UTF-8,UTF-32等等编码方式都是具体Unciode符号的存储方式。
乱码的根因形成:编码和解码方式的不同,且编码和解码使用的字符集不同。
Java中的字符编码
内码:程序内部使用的字符编码。Java字符的内码均为UTF-16(Unicode)编码。java文件编译形成class文件(编码)----JVM加载class文件(解码)。
外码:程序与外部(文件、数据库、网络等)交互使用的字符编码。
内码与外码的转换。外码---(解码)---Unicode码(内部使用统一的Unicode码,避免乱码); String.getBytes()(内码---(先解内码,再使用默认或者指定方式编码)--外码); new String(bytes[] array, charset) 解外码方式。
以HttpRequest的编码和解码为例(HttpParser类)
头参数(URL编码:URL不允许使用特定出了英文符号之外的字符,故需要进行编码%。不同的浏览器或客户端可能采用不同的编码方式。) 含有其他字符可以指定编码方式。一般默认解码都是ISO-8859-1
请求体(Content-Type指定了编码格式)
原文地址:https://www.cnblogs.com/lovelywxd/p/9149337.html