Java中的编码与解码

1. 基本概念:

(1)字符集(Charset):是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。

(2)字符编码(Character Encoding):就是一套自然语言的字符与二进制数之间的对应规则。

注:一套字符集必然至少有一套字符编码。

2. 常见的字符集与字符编码:

 

(1)ASCII字符集,ASCLL编码,英文。

(2)ISO-8859-1字符集,ISO-8859-1编码,拉丁,兼容ASCII。

(3)GBxxx系列, GB2312 —》 GBK—》GB18030,汉语,兼容ASCII。

(4)Unicode字符集 ,UTF8编码,兼容ASCII;UTF16编码;UTF32编码,全球通用。

 

3. 关于网络传输中的编码与解码:

原理:将数据转为字节,再转为16进制,单字节前加%

例:  传智播客 =  %E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2 (utf-8)

JavaScript中:

*Global全局对象中的方法:

decodeURI() 解码某个编码的 URI。

decodeURIComponent() 解码一个编码的 URI 组件。 注意:包含更多符号。

encodeURI() 把字符串编码为 URI。

encodeURIComponent() 把字符串编码为 URI 组件。 注意:包含更多符号。

escape() 对字符串进行编码。 注意:不能使用于对 URI。

unescape() 对由 escape() 编码的字符串进行解码。 注意:不能使用于对 URI。

Java中:

Class URLEncoder类 同JS中的encodeURIComponent(),包含更多符号。

Class URLDecoder类 同JS中的decodeURIComponent(),包含更多符号。

4. tomcat中get与post请求中参数的编码与解码:

*使用过滤器:

(1)URIEncoding和useBodyEncodingForURI两个参数互斥。useBodyEncodingForURI主要是为了兼容老版本,尽量用URIEncoding。

(2)tomcat8之前,URL中参数的默认解码是ISO-8859-1,而tomcat8的默认解码为utf-8。

(3)在过滤器中使用 request.setCharacterEncoding() 只能用来处理 POST 请求,对 GET 则无效。

(4)tomcat乱码的终极解决办法:

tomcat8之前:设置URIEncoding + Post的过滤器 或者 设置useBodyEncodingForURI+Post过滤器。

tomcat8之后:只要设置一个Post过滤器就可以了,tomcat9跟tomcat8是一样的。

在tomcat7的conf/server.xml中的端口号处添加即可:

port=”8080” protocol=”HTTP/1.1”

connectionTimeout=”20000”

URIEncoding=”UTF-8”

redirectPort=”8443”

使用maven,则在tomcat的插件中设置:

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>tomcat-maven-plugin</artifactId>

<version>1.1</version>

<configuration>

<path>/wp</path>

<port>8080</port>

<uriEncoding>UTF-8</uriEncoding>

<url>http://localhost:8080/manager/html</url>

<server>tomcat6</server>或者tomcat7插件

</configuration>

</plugin>

* 不使用过滤器:

tomcat8及之后的版本:

对get请求已经解决了中方乱码的问题,post请求则需要设置编码规则。

//设置参数查询的编码

request.setCharacterEncoding("utf-8"); // 默认按照iso-8859-1 字节转字符解码

该方法只能对请求实体内容的数据编码起作用。POST提交的数据在实体内容中,所以该方法对POST方法有效!

GET方法的参数放在URI后面,所以对GET方式无效!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值