请求中解决中文乱码问题

8 篇文章 0 订阅
1 篇文章 0 订阅

1.Spring MVC中为了防止客户端传入的中文数据出现乱码,可以使用Spring提供的编码过滤器来统一编码

1.1POST请求中文乱码问题解决

使用编码过滤器,只需要在web.xml中添加如下代码

<filter>	
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class> 
      org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>
      CharacterEncodingFilter
    </filter-name>
    <url-pattern>/*</url-pattern>	
  </filter-mapping>

在<filter>元素中,首先使用<fillter-class>元素配置了编码过滤器类org.springframework.web.filter.CharacterEncodingFilter,

然后使用<init-param>元素设置统一的编码为UTF-8。

最后配置<filter-mapping>元素,拦截前端页面中的所有请求,并交由名称CharacterEncodingFilter的编码过滤器类进行处理,将所有的请求信息内容以UTF-8的编码格式进行解析

1.2GET请求中文乱码问题解决

在使用参数之前重新编码

举例:

String username = new String(user.getUsername().getBytes("ISO8859-1"),"UTF-8");

其中ISO8859-1是Tomcat默认编码,需要将Tomcat编码后的内容再按UTF-8编码

2.请求参数中中文乱码问题

2.1POST

post是通过getReader()方法获取参数

request.setCharacterEncoding("UTF-8");//设置字符输入流的编码

先设置再获取

2.2GET

GET是通过getQueryString()方法获取参数

URL编码

1.将字符串按照编码方式转为二进制

2.每个字节转为2个1 6进制数并在前边加上%

乱码原因: tomcat 进行URL解码。默认的字符IS0-8859-1

举例:

1.先对乱码数据进行编码:转为字作数组

byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);

2.字节数组解码

username = new String(bytes,StandardCharsets.UTF_8);
System.out.println("解决乱码后:"+ username);

2.3通用方式(GET/POST) :先编码,再解码

举例:

new String(username.getBytes("IS0-8859-1"),"UTF-8");
username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);

Tomcat 8.0之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 HTTP 请求中文字符需要经过编码才能被正确传输。常见的编码方式有 URL 编码和表单编码。 对于 URL 编码,可以使用 `urllib.parse.quote()` 方法将中文字符编码成 `%XX` 的形式。例如: ``` import urllib.parse params = {'name': '张三', 'age': 20} query_string = urllib.parse.urlencode(params, encoding='utf-8') url = 'http://example.com?' + query_string ``` 这样,生成的 URL 就不会出现中文字符,而是被编码成 `%E5%BC%A0%E4%B8%89` 和 `%32%30`。 对于表单编码,可以在请求指定编码方式为 `application/x-www-form-urlencoded`,然后将参数编码成类似于 URL 编码的形式。例如: ``` import urllib.parse import requests params = {'name': '张三', 'age': 20} data = urllib.parse.urlencode(params, encoding='utf-8') headers = {'Content-Type': 'application/x-www-form-urlencoded'} response = requests.post('http://example.com', data=data, headers=headers) ``` 这样发送的数据就可以包含中文字符了。 如果服务端接收到的参数依然是码,可以尝试在服务端对参数进行解码。对于 Python Flask 框架,可以使用 `request.get_data()` 方法获取请求数据,然后使用 `decode()` 方法对数据进行解码。例如: ``` from flask import Flask, request import urllib.parse app = Flask(__name__) @app.route('/example', methods=['POST']) def example(): data = request.get_data() decoded_data = urllib.parse.unquote(data.decode('utf-8')) # 处理解码后的参数 ``` 这样就可以解决请求参数中文码的问题了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值