乱码的根本原因是字节和字符的问题(转)
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
乱码的根本原因是字节和字符的问题(转)相关推荐
- python字节转字符串中文乱码_黄聪:解决python中文处理乱码,先要弄懂“字符”和“字节”的差别...
我来讲一下字符问题我的理解吧,虽然我对Python的编码处理的具体细节还不太清楚,不过临时稍微看了一下,和Perl的原理也差不多 最重要的是必须区分"字符"和"字节&qu ...
- 深入理解——字节、字符/字符串、Unicode 字符集
文章目录 1 字符编码 2 为什么需要字符编码 3 字节,字符,字符串 4 进程间的字符信息流动 5 Java 与 Unicode 6 Python 与 Unicode 1 字符编码 1.ASCII ...
- 一个汉字几个字符?几个字节?字符与字节关系傻傻分不清
一个汉字一个字符!不信你去java输入char ch = '汉'看看报不报错 学习java也有段时间了,一直都是毛里毛糙的学习,但都是停留在略懂阶段,似乎会,实际上差得远了,,还是要沉下来心一点一点学 ...
- 字节?字符?它们之间的对应关系?
1.字节 字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符.1个字节占8个二进制位(1Byte=8Bit). 在C语言中一般数据类型所占的 ...
- python 将一个整数变成2个字节的字符
python 将int 变成指定字节的字符可以使用struct , 通过字符对照表可以知道转2个字节可是使用H 或者h 对照表:地址链接 代码如下 import structprint(struct. ...
- MySQL基础篇:位、字节和字符的关系
零. 目的 为了深入的学习MySQL数据库的相关知识,在学习MySQL数据库中数据类型之前,先总结一下位.字节.字符的关系,避免弄混. 一.位 位(bit)是计算机内部数据存储的最小单位.8个&quo ...
- java 替换四个字节的字符 '\xF0\x9F\x98\x84\xF0\x9F)的解决方案
2019独角兽企业重金招聘Python工程师标准>>> /*** 替换四个字节的字符 '\xF0\x9F\x98\x84\xF0\x9F)的解决方案 ?* @author ChenG ...
- [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)...
一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...
- python2 去除 字符串中emoji 符号,去除所有4字节utf8字符
对咱们天朝程序员来说,最常用的编码方式就是UTF-8了.大家在创建数据库的时候,总是条件反射选择UTF-8编码. 最近我遇到一个emoji 符号不能写入数据库得问题.通过查询资料得知,emoji 符号 ...
最新文章
- 使用CSS 3创建不规则图形
- 2018-2019-1 20165234 实验三 并发程序
- 科技复原,让 3000 多前年的木乃伊「发声」
- JavaWeb结合七牛云存储搭建个人相册服务
- linux 临时文件 锁,linux – 无法使用文件描述符flock锁定文件
- boost any 实现万能容器_全面剖析 C++ Boost 智能指针!| CSDN 博文精选
- vba把json转数组中_JavaScript 中的“黑话”
- ModuleNotFoundError: No module named '_tkinter'
- 剑指offer面试题[37]-两个链表的第一个公共结点
- 【WCF】WCF中的InstanceContext与ConcurrencyMode【转】
- 常用算法2 - 广度优先搜索 深度优先搜索 (python实现)
- Nerd的套现ATM机
- Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介
- python传递list给前端并在前端成功显示图片·可以显示多张后台传过来的图片
- Xshell6与Xftp6教育版下载(免费)
- php 设置针式打印机纸张,针式打印机设置方法 针式打印机打印连续纸设置技巧【图文】...
- 60秒学会一个Python小例子,42个常用操作,带你学好基础!
- Android developer 阅读笔记--应用资源概览
- 欢迎来到whai的博客
- 一般学校计算机密码是什么,学校电脑密码忘了怎么解?
热门文章
- 计算机程序设计考试题目,计算机程序设计员理论试题(题库)
- excel随机数_如何使用excel高效背GRE单词?
- java 基本类型内存_java基本数据类型、内存分析、装包拆包
- oracle元数据存储在表空间,[Oracle] dbms_metadata.get_ddl 的使用方法总结
- docker hub 国内镜像_Mac设置docker国内镜像源
- Linux脚本实战之猜数字
- linux x下载工具,Linux下强大的Axel下载工具
- 客服机器人源码_快速搭建对话机器人,就用这一招!
- 5G通信3大场景 来源:elecfans
- Linux上用Docker部署Net Core项目