request.getParameter乱码的原因

2024-04-01 09:58

本文主要是介绍request.getParameter乱码的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http请求是以ISO-8859-1的编码来传送url的

如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送

如“中”的UTF-8编码为:E4 B8 AD在请求时为%E4%B8%AD字节之间是%分隔

那么服务器收到这段字节流后,必须将它转成相应的字符,平时所使用的request.getParameter("name")直接得到了字符串,

那么从字节流到字符流这个过程系统己经帮助我们完成了(乱码的产生由此开始)

类似下面的程序:将汉字"中"的UTF-8形式转成汉字

public class EncodingTest {public static void main(String[] args) {String utf_string = "E4%B8%AD"; //中的UTF-8编码,三个字节表示,用%分开String[] utf_array = utf_string.split("%");byte[] utf_byte = new byte[utf_array.length];for (int i = 0; i < utf_array.length; i++) {utf_byte[i] = (byte) Integer.parseInt(utf_array[i], 16);}try {System.out.println(new String(utf_byte, "UTF-8"));} catch(UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

请注意段代码:new String(utf_byte,"UTF-8")它将字节流以UTF-8的编码还原为字符串

但它使用的前提条件是utf_byte必须是utf-8的字节流,

如果这样:

String aa = "中";

bb = aa.getBytes("ISO-8859-1");

new String(bb ,"UTF-8")肯定是乱码了

也就是说一个字符串以什么样的编码转换成字节流,就必须以什么样的编码进行还原

bb=aa.getBytes("UTF-8")就必须new String(bb,"UTF-8")否则乱码

言归正传:

url通过iso-8859-1传输,服务器收到这个字节流,默认会以ISO-8859-1来将这个字节流还原成相应的字符串,

就如同这样:

客户端:bb = aa.getBytes("UTF-8");

到了服务器:cc = new String(bb,"ISO-8859-1")还原字节流为节符串

request.getParameter("");获取到这个cc,那么cc当然乱码了

所以就产生了这样的做法:new String(request.getParameter("").getBytes("ISO-8859-1"),"UTF-8")还原成原始字符串

将乱码字符串还原成原始的字节流,重新按UTF-8来编码.

至于在tomcat中更改URI-Encoding及使用过滤器,是用来更改将字节流转成字符串的编码

这篇关于request.getParameter乱码的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866864

相关文章

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1