1,为什么会出现乱码

乱码的根本原因是字节和字符的问题。

我们在大学学习c的时候,老师就有介绍字符和字节。

字节由8个bit位表示,最早的编码是ASCII码,ASCII码是单字节的编码字符。因为单字节8个bit位对于中文字符和其他国家的字符来说根本不够用,需要更多的bit位来表示字符。我们现在常见的编码有GBK,BIG5,GB2312,UTF-8,通过编码映射表可以确定bit位和字符之间的映射关系。

一个应用从服务端把需要展现的文字换成一段字节流传输给浏览器,浏览器把字节流组装字符展现的过程一般是这样(应用的编码是GBK):

服务端:String text->getBytes("GBK")->byte[] bytes

浏览端:byte[] bytes->new String("bytes","GBK") ->String text

如果字节流处理的转换过程使用编码不一致就会出现乱码问题。

2,常见的乱码现象

a,提交表单的时候出现乱码(页面编码和服务端编码不一致)

页面是jsp的时候,会经常出现的问题,这个比较容易发现和修改,只要改下jsp文件的头就可以了。

<%@ page contentType="text/html;charset=GB2312" language="java"  %>

b,系统之间接口调用出现乱码(如果两个应用的编码格式不一致,get和post方式都是会出现乱码问题的)

今天遇到一个问题,系统A调用我们的http接口他们提交过来的数据是乱码,主要是因为两个系统的编码格式不一致。我们的应用是GBK,对方的是UTF-8。

解决方法是:

需要他们重新指定下http request的编码格式。

c,和前端交互的时候容易出现乱码(同一个应用get方式)

页面脚本传种中文到后台的时候会出现乱码,而且中文编码是不同的浏览器有各自的实现,后端想用 new String(“乱码”.getBytes(“GBK”),”UTF-8”)这种方式

去还原字符,最后得到是问号。

前端来说最简单的解决方式是用js对页面上传输到后台的中文进行encodeURI编码,传到服务端如果是进行decode。

(tomcat默认会先进行一次decode,所有有时候js会对中文进行2次编码)

另外一种get方式乱码的解决方式是修改容器的encodingURI来实现。

jboss : 修改 /server/default/deploy/jbossweb.sar/server.xml

<Connector port="6666" address="${jboss.bind.address}"
  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
  enableLookups="false" redirectPort="8443" acceptCount="100"
  connectionTimeout="20000" disableUploadTimeout="true" <span style="color: #ff0000;">URIEncoding="GBK"</span>/>

   tomcat:/conf/server.xml

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

  

https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

http://www.cnblogs.com/iusmile/archive/2012/06/01/2531262.html

转载于:https://www.cnblogs.com/softidea/p/3907135.html

乱码的根本原因是字节和字符的问题(转)相关推荐

  1. python字节转字符串中文乱码_黄聪:解决python中文处理乱码,先要弄懂“字符”和“字节”的差别...

    我来讲一下字符问题我的理解吧,虽然我对Python的编码处理的具体细节还不太清楚,不过临时稍微看了一下,和Perl的原理也差不多 最重要的是必须区分"字符"和"字节&qu ...

  2. 深入理解——字节、字符/字符串、Unicode 字符集

    文章目录 1 字符编码 2 为什么需要字符编码 3 字节,字符,字符串 4 进程间的字符信息流动 5 Java 与 Unicode 6 Python 与 Unicode 1 字符编码 1.ASCII ...

  3. 一个汉字几个字符?几个字节?字符与字节关系傻傻分不清

    一个汉字一个字符!不信你去java输入char ch = '汉'看看报不报错 学习java也有段时间了,一直都是毛里毛糙的学习,但都是停留在略懂阶段,似乎会,实际上差得远了,,还是要沉下来心一点一点学 ...

  4. 字节?字符?它们之间的对应关系?

    1.字节 字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符.1个字节占8个二进制位(1Byte=8Bit). 在C语言中一般数据类型所占的 ...

  5. python 将一个整数变成2个字节的字符

    python 将int 变成指定字节的字符可以使用struct , 通过字符对照表可以知道转2个字节可是使用H 或者h 对照表:地址链接 代码如下 import structprint(struct. ...

  6. MySQL基础篇:位、字节和字符的关系

    零. 目的 为了深入的学习MySQL数据库的相关知识,在学习MySQL数据库中数据类型之前,先总结一下位.字节.字符的关系,避免弄混. 一.位 位(bit)是计算机内部数据存储的最小单位.8个&quo ...

  7. java 替换四个字节的字符 '\xF0\x9F\x98\x84\xF0\x9F)的解决方案

    2019独角兽企业重金招聘Python工程师标准>>> /*** 替换四个字节的字符 '\xF0\x9F\x98\x84\xF0\x9F)的解决方案 ?* @author ChenG ...

  8. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)...

    一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...

  9. python2 去除 字符串中emoji 符号,去除所有4字节utf8字符

    对咱们天朝程序员来说,最常用的编码方式就是UTF-8了.大家在创建数据库的时候,总是条件反射选择UTF-8编码. 最近我遇到一个emoji 符号不能写入数据库得问题.通过查询资料得知,emoji 符号 ...

最新文章

  1. 使用CSS 3创建不规则图形
  2. 2018-2019-1 20165234 实验三 并发程序
  3. 科技复原,让 3000 多前年的木乃伊「发声」
  4. JavaWeb结合七牛云存储搭建个人相册服务
  5. linux 临时文件 锁,linux – 无法使用文件描述符flock锁定文件
  6. boost any 实现万能容器_全面剖析 C++ Boost 智能指针!| CSDN 博文精选
  7. vba把json转数组中_JavaScript 中的“黑话”
  8. ModuleNotFoundError: No module named '_tkinter'
  9. 剑指offer面试题[37]-两个链表的第一个公共结点
  10. 【WCF】WCF中的InstanceContext与ConcurrencyMode【转】
  11. 常用算法2 - 广度优先搜索 深度优先搜索 (python实现)
  12. Nerd的套现ATM机
  13. Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
  14. python传递list给前端并在前端成功显示图片·可以显示多张后台传过来的图片
  15. Xshell6与Xftp6教育版下载(免费)
  16. php 设置针式打印机纸张,针式打印机设置方法 针式打印机打印连续纸设置技巧【图文】...
  17. 60秒学会一个Python小例子,42个常用操作,带你学好基础!
  18. Android developer 阅读笔记--应用资源概览
  19. 欢迎来到whai的博客
  20. 一般学校计算机密码是什么,学校电脑密码忘了怎么解?

热门文章

  1. 计算机程序设计考试题目,计算机程序设计员理论试题(题库)
  2. excel随机数_如何使用excel高效背GRE单词?
  3. java 基本类型内存_java基本数据类型、内存分析、装包拆包
  4. oracle元数据存储在表空间,[Oracle] dbms_metadata.get_ddl 的使用方法总结
  5. docker hub 国内镜像_Mac设置docker国内镜像源
  6. Linux脚本实战之猜数字
  7. linux x下载工具,Linux下强大的Axel下载工具
  8. 客服机器人源码_快速搭建对话机器人,就用这一招!
  9. 5G通信3大场景 来源:elecfans
  10. Linux上用Docker部署Net Core项目