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

java的内核是Unicode的,也就是说,在程序处理字符时是用Unicode来表示字符的,但是文件和流的保存方式是使用字节流的。在java的基本数据类型中,char是Unicode的,而byte是字节,因此,在不同的环节java要对字节流和char进行转换。这种转换发生时如果字符集的编码选择不当,就会出现乱码问题。

我们常见的乱码大致有如下几种情形:
1、汉字变成了问号"?"
2、有的汉字显示正确,有的则显示错误
3、显示乱码(有些是汉字但并不是你预期的)
4、读写数据库出现乱码

下面我们逐一对它们出现的原因做一些解释:

首先,我们讨论汉字变成问号的问题。

Java中byte与char相互转换的方法在sun.io包中。其中,byte到char的常用转换方法是:
public static ByteToCharConverter getConverter(String encoding);

为了便于大家理解,我们先来做一个小实验:比如,汉字"你"的GBK编码为0xc4e3,其Unicode编码是/u4f60。我们的实验是这样的,先有一个页面比如名为a_gbk.jsp输入汉字"你",提交给页面b_gbk.jsp。在b_gbk.jsp文件中以某种编码方式得到"你"的字节数组,再将该数组以某种编码方式转换成char,如果得到的char值是0x4f60则转换是正确的。

a_gbk.jsp的代码如下:

参考文献:

UTF-8 and Unicode FAQ

《JSP动态网站技术入门与提高》太阳工作室 孙晓龙 赵莉编著

参考文献:

UTF-8 and Unicode FAQ

《JSP动态网站技术入门与提高》太阳工作室 孙晓龙 赵莉编著

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

  1. html文件浏览器乱码怎么解决方法,【学习笔记一】HTML文件在浏览器中文显示乱码的原因及解决办法...

    最近在学习前端html相关知识(备注:前端小白一枚),准备从移动端开发扩展到前端开发,希望做一个大前端,即前端全栈工程师.为什么要转向前端学习开发,在后面的文章中,我会详细阐述这个原因和相关心得. 在 ...

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

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

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

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

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

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

  5. myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)

    myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) 参考文章: (1)myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) (2)https://www. ...

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

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

  7. php连接mysql乱码原因_PHP连接MYSQL出现乱码的原因与解决办法

    PHP连接mysql出现乱码的原因与解决方法 解决MySql数据库乱码的一个首要前提是保证 数据库+数据表+前端显示 编码一致,国内项目一般统一设定为GB2312或GBK,而国际化项目则一般使用utf ...

  8. phpMyAdmin将数据表中数据导出为csv文件,用微软excel打开时,中文乱码的原因以及解决办法

    中文乱码的原因:用户使用phpMyAdmin可以将数据表中数据导出为csv文件,而使用Excel工具打开该文件时,可能出现中文乱码的情况.这是因为phpMyAdmin导出的csv文件使用了UTF-8编 ...

  9. c++日志文件中文显示乱码的问题及解决办法

    近段时间在做战斗系统,昨天观察日志时发现中文显示乱码,而且奇怪的是有些中文日志是正常的,有些中文日志乱码 就是下面这种表现 Debug - Thu Oct 24 20:42:35 2019 : sys ...

最新文章

  1. 区块链论文:OmniLedger,一种区块链分片技术
  2. 事件控制寄存器(AFIO_EVCR) (2011-09-09 13:51:58)
  3. mysql 清洗字段数据,根据字段条件清理MySQL数据库数据
  4. Java将一段逗号分割的字符串转换成一个数组(亲测)
  5. javascript运算符_JavaScript中!=或!==运算符之间的区别
  6. 释放Ubuntu/Linux系统cache,增加可用内存空间
  7. mysql数据库登录历史_mysql数据库查看历史记录
  8. YOLO算法的发展历程
  9. 国内三大知名开源B2B2C多用户商城系统对比
  10. Swiper的种种踩坑与解决方案
  11. java 读取485_java通信 485
  12. 夏普打印机SHARP MX-2018UC 发生错误,错误代码:H3-00 解决办法
  13. grammarly怎么安装到word
  14. wpa/wpa2无线网pin码破解
  15. 主板芯片组和内存映射
  16. HTML入门网页制作,HTML+css运用做出
  17. 半小时教你做大转盘游戏(QT篇)
  18. Rancher部署日志
  19. Linux 文本替换 字符串替换 221012笔记
  20. 试题 算法训练 唯一的啥子ALGO-973

热门文章

  1. 【新书推荐】【2020.02】可穿戴设备传感器和天线的设计与优化
  2. 程序员们,阿里、腾讯和百度的公司职级、薪资待遇,你有了解吗?
  3. 学习嵌入式开发要掌握的几个重要手册
  4. 关于如何用大数据做“用户画像”调查报告(持续更新)
  5. 计算机启动后没有桌面,我的电脑开机后桌面上的文件都没有了是什么情况?
  6. linux创建和编辑文件,linux基础-第九单元 利用vi编辑器创建和编辑正文文件
  7. linux 切换用户之后变成-bash-x.x$的解决方法
  8. linux 切图软件下载,【Avocode切图软件怎么用】Avocode切图软件好不好_使用技巧-ZOL软件百科...
  9. Java 猜字小游戏
  10. 04-ESP8226的WiFi通用库学习