Java中文乱码问题分析与标本兼治的方法

你是否遇到过这种情景,代码都写OK了,测试也没问题,但一运行发现显示的是乱码,这下坏了,明天还要给客户做演示汇报,现在已经到晚上22点了,别无选择,只能连夜查找问题,真悲剧啊!

网络配图 为了不让悲剧重演或不在让悲剧在你身上重演,我今天和大家一起学习Java中文乱码问题出现的原因和解决方法及注意事项,还是那句话,水平有限,有不妥之处,欢迎文明纠正;学习马上开始。 Java初学者及初级开发人员对于中文乱码问题一般都无从下手,更不用说解决了;这也不能怪他们,因为造成乱码的原因很多,没有丰富的开发经验,很难一步到位找准问题;我们要想把Java中文乱码问题彻底解决,就必须了解Java系统的中文实现原理。 下面我们通过开发过程中经常用的一些临时解决方法来学习它的原理,当然最后也会给大家提供一个标本兼治的方案,从此不在受中文问题困扰。 1、使用较早的一个方法是使用String的字节码转换,这种方法以破坏对象封装性为代价,进行了字节码转换; 2、对J2EE容器进行编码设置,比如Eclipse的编码设置,但如果应用系统脱离了该容器,则又会发生乱码; Java处理字符的原理是它在内部运算过程中,所有的字符都会被转化为UTF-8编码来进行运算处理,字符串在被Java处理前,Java是根据操作系统的默认编码字符集来决定字符串的初始编码,并且Java系统的输入和输出的都用的是操作系统的默认编码。

网络配图 现实情况是实际项目开发中,能够控制住Java系统输入和输出部分是很难的,特别是J2EE项目中涉及到与外部浏览器和数据库的交互等情况。 Java的输入途径我整理了3种:

  • 通过页面表单集合成请求发送给服务器;
  • 从数据库中读取;
  • JSP文件,JSP在第一次运行时会被编译成Servlet,JSP中常常使用中文字符,如何没有给开发工具设置编码, javac编 译时,将默认用操作系统编码。

网络配图 Java的输出途径有2种:

  • JSP页面的输出;
  • 将字符串保存到数据库中,也是一种输出。

最后总结开发过程中要遵循的原则: 1、J2EE应用和容器分离的原则; 2、统一Java系统的输入、输出和操作系统三者的编码字符; 3、系统与外界有交互的地方,如果能够设定编码时就要设定为UTF-8; 4、项目启动时就要明确指定整个应用系统统一字符集,并要求开发团队每个成员都必须遵守。 好了,这是我多年开发过程中整理的一些方法和大家一起分享,你有更好的方法可以留言,大家一起讨论学习,共同进步,谢谢朋友们。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2017-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

一步步带你了解ID发号器是什么、为什么、如何做!

上一篇文章《面试必备:如何将一个长URL转换为一个短URL?》中谈到如何将长地址URL转换为短地址URL,其中谈到了一个比较理想的解决方案就是使用发号器生成一个...

17820
来自专栏前端下午茶

JS 状态模式

状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类。 其实就是用一个对象或者数组记录一组状态,每个状态对应一个实现...

37840
来自专栏Java后端技术栈

Java代码评审歪诗!让你写出更加优秀的代码!

架构师说, 用20个字描述代码评审的内容, 自省也省人。由于是一字一含义, 不连贯, 为了增强趣味性, 每句都增加对应的歪解。只是对常见评审的描述, 不尽之处,...

10610
来自专栏北京马哥教育

爬虫实践---一次下完所有小说:排行榜小说批量下载

? 一、目标 排行榜的地址: http://www.qu.la/paihangbang/ 找到各类排行旁的的每一部小说的名字,和在该网站的链接。 二、...

32950
来自专栏C语言及其他语言

【编程经验】C语言中EOF是什么意思

C语言中EOF的意思 今天跟大家说道说道这个C语言中EOF是什么意思。 相信很多朋友在学习C语言过程中,都看到过EOF的字样,但翻过整本C语...

42970
来自专栏Python专栏

Python | 一次下完所有小说,还有谁!

来源:http://www.cnblogs.com/Josiah-Lin/p/7241678.html

12930
来自专栏数据和云

中文命名可能有什么坏处?

在最近的一个报告分析中,再次遭遇到全中文的数据结构设计。从图示中可以看到,所有的表名、索引名等,都是用中文命名的。 我们不考虑面向对象、方法那回事,单纯从技术角...

38750
来自专栏AI科技评论

开发 | Python高级技巧:用一行代码减少一半内存占用

我想与大家分享一些我和我的团队在一个项目中经历的一些问题。在这个项目中,我们必须要存储和处理一个相当大的动态列表。测试人员在测试过程中,抱怨内存不足。下面介绍一...

12740
来自专栏calvin

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

lldb工具的安装,linux下netcore如何生成dump文件,查看下文 centos7使用lldb调试netcore应用转储dump文件

28230
来自专栏信安之路

【作者投稿】一道反序列化CTF引起的思考

刚开始看到这道题目,我是懵逼的。因为整篇代码没有数据输入口,然后怀疑有其它机关,抓包、扫目录无果之后,找到了一篇writeup如下:

14500

扫码关注云+社区

领取腾讯云代金券