1.字符乱码出现的原因:

出现乱码是由于数据在传递和接受过程中字符编码格式不一致导致的。

for examples:

输入11-->在2进制中代表的是3-->在8进制中代表的是9-->在16进制中代表的17

  在这里同样输入的都是11,但是由于进制的不一样,所以代表的值也不一样。

同理,编码在底层都是一串字节码,由于编码格式的不同,比如以UTF-8编码格式进行编码,以iso8859-1编码格式就无法进行解析,所以所展现出来的字符串就不是原先的字符串了。

2.字符乱码的解决方式

2.1将乱码先进行编码,在进行解码(不管是get请求还是post请求都适用)

String userCount = User.getUserCount();
//将乱码字符串按照错误的编码格式转换为原始的字节码序列
byte[] bs = userCount.getBytes("iso889-1");
//将原始的字节码序列使用正确的编码格式进行编码,转换为正确的文字
userCount  = new String(bs,"utf-8");

2.2使用spring框架构建项目的话可以使用编码过滤器(post请求方式)

在web.xml中添加:  

<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>encoding</filter-name><servlet-name>springmvc</servlet-name></filter-mapping>

  <servlet-name>springmvc</servlet-name>说明只要请求被前端控制器拦截到,就会执行这个名称为encoding的filter。

CharacterEncodingFilter的源码如下:

public class CharacterEncodingFilter extends OncePerRequestFilter {/*设置了两个属性encoding和forceEncoding,encoding代表的是编码格式,forceEncoding表示是否启用*/private String encoding;private boolean forceEncoding = false;public CharacterEncodingFilter() {}public void setEncoding(String encoding) {this.encoding = encoding;}public void setForceEncoding(boolean forceEncoding) {this.forceEncoding = forceEncoding;}protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {/*当编码格式不为空以及forceEncoding为true时,那么设置就将服务器端的编码格式设置为配置文件中设置的编码格式*/if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {      //只能修改请求体中编码方式request.setCharacterEncoding(this.encoding);if (this.forceEncoding) {response.setCharacterEncoding(this.encoding);}}filterChain.doFilter(request, response);}
}

所以需要在web.xml中设置encoding和forceEncoding的初始化值

  <filter><filter-name>encoding</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><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><servlet-name>springmvc</servlet-name></filter-mapping>

2.3如果是本地的项目的话,可以在tomcat的配置文件server.xml中修改编码格式 (get请求)

<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />

  在server.xml配置文件下,添加属性URIEncoding="UTF-8"

总结:字符乱码问题需要分get请求和post请求。

转载于:https://www.cnblogs.com/wsxdev/p/11432122.html

字符乱码出现的原因及解决办法相关推荐

  1. CMD中文乱码出现的原因及解决办法

    出现情况 在用notepad++编写helloword程序时,由于将感叹号输成中文的"!"而不是英文的"!",导致运行时出现乱码,结果如下所示. 为什么会出现这 ...

  2. 中文字符乱码的原因及解决办法

    中文字符乱码的原因及解决办法 java的内核是Unicode的,也就是说,在程序处理字符时是用Unicode来表示字符的,但是文件和流的保存方式是使用字节流的.在java的基本数据类型中,char是U ...

  3. mysql保存中文乱码的原因和解决办法

    当你遇到这个mysql保存中文乱码问题的时候,期待找到mysql保存中文乱码的原因和解决办法这样一篇能解决问题的文章是多么激动人心.   也许30%的程序员会选择自己百度,结果发现网友已经贴了很多类似 ...

  4. mysql保存时乱码了_MySQL保存中文乱码的原因和解决办法

    (3)MySQL的字符集设置. 这个是重点了,一般都是在这里搞错而出现了mysql乱码. mysql编码设置可以分为三种设置:数据库的编码.表的编码.和字段的编码. a.数据库的编码: 在sqlyog ...

  5. html里显示中文乱码的原因及解决办法

    html里显示中文乱码的原因及解决办法 我试着写第一个html文件时候,发现打开保存的html文件后,中文显示的是乱码的.我知道这是字符编码的原因,发现要在开头统一规范下编码格式,通常charset的 ...

  6. MoviePy中文乱码的原因以及解决办法

    很多朋友在群里面提问说TextClip出现中文乱码.今天写博客讲一下原因及解决办法. 原因: 很多人直接拷贝了别人的代码案例,像下面这样: from moviepy.editor import Tex ...

  7. deepfacelab应用报错原因和解决办法

    deepfacelab软件运行报错,请翻看最后的报错信息,就是Error这一句开始后面的信息.多数都有,有一些没有 镇帖错误 1: oom 显存不足 注意看软件错误界面,单凡是出现了oom字样,说明是 ...

  8. MySQL备库复制延迟的原因及解决办法

    背景 今天有同事问我主从复制延迟会影响高可用切换的 RTO 怎么办,这个不需要做实验,我可以直接回答,所以有了以下赶鸭子的文章,都是一线运维经验之谈,建议四连:点赞.收藏.转发.在看. 复制延迟的原因 ...

  9. python open文件失败_python open打开文件失败原因及解决办法

    1.问题: 今天遇到一个问题,在使用绝对路径open(filename,mode)时失败 代码如下: try: source=open('D:\eclipse-workspace\AcrSoftwar ...

  10. 当li设置为inline-block之后元素之间空隙的产生原因和解决办法

    当我们在使用ul>li标签写导航的时候,又不想让其变成浮动流,我们只需要把li的css样式添加一个display: inline-block就可以了. 但是当我们写完样式之后,本来应该是这样的. ...

最新文章

  1. 2:0!谷歌 AI “AlphaStar“ 虐杀职业星际玩家
  2. Data Mapper
  3. FreeRTOS — 临界段和开关中断
  4. sed是linux命令吗,Linux命令 sed
  5. poj 2503 Trie树
  6. C语言转义字符的使用
  7. 苏州为什么只能做二线中游?
  8. 如何使用阿里云搭建个人网站
  9. [android]netd与NetworkManagementService初印象
  10. 15. Provide access to raw resources in resouce-managing classes
  11. 服务器内网怎么更新微软补丁,架WSUS服务器 内网自动打补丁
  12. 中国土壤修复行业十四五专项调研及投资战略规划报告2022-2027年新版
  13. 泛微OA前端代码开发方式
  14. 二维码生成代码(转载)
  15. 基于动态优先级的时间片轮转调度算法c语言
  16. 【非洲秃鹫优化算法】基于非洲秃鹫优化算法求解多目标优化问题MOAVOA含Matlab源码
  17. 面试自动化测试的必问题
  18. 为什么说Java中只有值传递
  19. C语言编程之字母转换并保存至磁盘
  20. 用JS生成MIDI文件(附代码)

热门文章

  1. 如何在视频中加水印?分享这些实用的加水印方法给你
  2. ajax 传数据视频,Django知识整理四(choices参数,MTV与MVC模型,ajax介绍,ajax传json文件,ajax传文件,contentType前后端传输数据编码格式)...
  3. 海康监控如何设置STMP邮箱报警
  4. (转)一些jbx的配置
  5. 信号处理:希尔伯特-黄变换
  6. 史上最全的数据库面试题,面试前刷一刷
  7. js逆向学习路线指南
  8. json解析天气预报java_Json解析-和风天气
  9. 看完《二舅》,我更内耗了
  10. webService接口的荆棘之路