在做java项目(特别是web项目)的过程中,中文乱码一直是我们开发人员比较头疼的问题,因为涉及到编码,解码,字符集,以及国际化等诸多问题,所以在着手解决的时候也缺乏相关的知识。我花了一些时间自己动手实验了一把,虽然没有洞悉编码,解码这些底层原理,但是解决实际问题应该足够了。这里主要针对java web项目中的文乱码问题。

从浏览器采用form方式提交数据到服务器,可以分为post和get方法。

1,post方法:

在jsp页面中的page指令中,有一个pageEncoding,这个指令表示jsp翻译成servlet时采用的编码,以及form提交数据的编码格式。所以post方法提交数据的编码格式由pageEncoding指定。那解码方式呢?通常,我们在页面设置了pageEncoding=”utf-8”,在后台用request.getParameter()得到的往往是乱码,而进一步通过new String(getBytes(“iso-8859-1”),”utf-8”)处理之后就能得到正确的数据。这是因为服务器默认的解码方式是iso-8859-1,所以用编码,解码流程解释上面那2个动作分别是:utf-8编码—>iso-8859-1解码(当然是乱码);        utf-8编码—>iso-8859-1解码—>iso-8859-1编码—>utf-8解码,这是个对称的过程,所以能正确得到数据。那服务器默认的解码方式能改吗?当然可以,调用request.setCharacterEncoding()就能设置,而且只针对post方式有效,设置以后request.getParameter()直接就是正确的数据了。

2,get方法

与post方法一样,编码方式由pageEncoding指定,但是get方式的解码方式与post就不一样了。在tomcat的conf目录下有一个server.xml的配置文件,在里面找到Connector节点,有一个URIEncoding属性,这个属性就是指定get方式的数据解码格式的,而且只针对get方式有效。其他处理与post一样。

另外,通过Ajax请求向后台发送的数据由于是附在URL地址后面的,所以跟get请求一样。编码由pageEncoding指定,解码由URIEncoding指定。但是有很多开发人员乐于另外一种方式:用两次encodeURI编码,然后在后台用URLDecoder.decode(str,”utf-8”)解码。这是一个什么过程呢?我们知道,encodeURI编码是采用的utf-8编码,所以,这个过程为:utf-8编码—>utf-8编码—>iso-8859-1解码—>utf-8解码。这看起来不像一个对称过程,但最后为什么能得到正确结果呢?这是因为经过第一次utf-8编码之后,产生的已经是非中文字符,所以,对非中文字符采再用utf-8编码,iso-8859-1解码不会有任何问题,这样看来,它还是一个对称的编码,解码过程,当然能正确解析了。

当然,我所说的这个“对称”编码解码过程,也不是所有编码都适用,例如:

gbk编码—>utf-8解码—>utf-8编码—>gbk解码,最后还是乱码!

因为gbk编码—>utf-8解码产生了不可恢复的错误,造成了信息丢失,至于为什么产生永久错误,得从编码的底层说起……

java 时间乱码,Java乱码解决方案相关推荐

  1. android java 时间_android java获取当前时间的总结

    Java 代码 importjava.text.SimpleDateFormat; SimpleDateFormat   formatter   =   newSimpleDateFormat   ( ...

  2. 【Java基础】Java基础100实例

    [学习参考资料]:菜鸟教程-Java教程 通过菜鸟教程-Java教程的初步学习,现将其教程训练代码汇聚成篇. 菜鸟教程-Java Coding学习笔记 Applet应用程序实例 文档注释演示实例 序列 ...

  3. 木其工作室代写程序 [原]java web项目各种乱码的解决方案

    淘宝网上专业IT程序代写 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.ne ...

  4. Java中文乱码破碎重组_Java 关于中文乱码问题的解决方案与经验

    五.我们要对java的编译器有所了解: Javac ?encoding 我们常常没有用到encoding这个参数.其实encoding这个参数对于跨平台的操作是很重要的.如果没有指定encoding, ...

  5. Java中文jsp页面被转码了_JSP中文乱码问题终极解决方案

    转载自: http://www.cnblogs.com/beijiguangyong/ http://www.cnblogs.com/beijiguangyong/archive/2012/03/31 ...

  6. cmd编译java文件中文乱码_乱码 HelloWorld 世界你好 cmd 执行输出的中文java 显示乱码 解决 另附 win无法执行编译运行javac java编译文件的解决方案...

    [博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者公众号aandb7 爱码一生,QQ群927113708, github: https://github.com/mayangbo666 ...

  7. java zip打包与乱码的解决

    2019独角兽企业重金招聘Python工程师标准>>> 关于 java zip 打包用的场景还是有不少,包括在归档的时候,还有就是在提交数据的时候,一般都会采用这种方式.但是这里面最 ...

  8. java怎么解决页面乱码问题_java页面中文乱码的解决办法

    骚年啊,资源文件名不要有中文啊,这可是常识啊 而且文件名不要有空格,不然容易悲剧 ######回复 @汪兴 : 有一个办法规避,就是上传的文件名更名为hash,实际上很多网站都这么做的,最终在页面上的 ...

  9. Java传xml时字符串乱码_php调用java传递xml字符串乱码怎么办

    php调用java传递xml字符串乱码的解决办法:首先使用CURL在命令行中完成请求:然后将调用接口时的[Content-Type:application/json]改成[application/xm ...

  10. java jar 源码乱码,java使用jar包时出现乱码的解决方法

    java使用jar包时出现乱码的解决方法 发布时间:2020-06-17 17:06:29 来源:亿速云 阅读:105 作者:元一 jar包是什么: jar(Java Archive,Java归档文件 ...

最新文章

  1. python元类 orm_python-进阶-元类在ORM上的应用详解
  2. 逆序对(树状数组解决)
  3. 7个顶级资源网站,不知道就很可惜
  4. Windows下安装SQLPlus的帮助
  5. 调用SMS腾讯云短信验证码API的几个坑,及详细使用流程
  6. STM32----ADC多通道采集
  7. python实现8大排序算法
  8. [转] Android SDK manager 无法获取更新版本列表
  9. hive启动报错 java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7B
  10. python愿意_我的第一个Python程序!有人愿意复习一下帮助我改进吗?
  11. linux 信号量_SystemV IPC通信信号量
  12. 【Codeforces】 B. Make it Divisible by 25
  13. SLAM十四讲第三章课后习题
  14. HTML5期末大作业:网站——响应式网络游戏官网HTML+CSS+JavaScript ~ 学生HTML个人网页作业作品下载 ~ web课程设计网页规划与设计 ~大学生个人网站作业模板 ~简单个人网页
  15. 如何查看网页元素使用的js
  16. Java操作Neo4J就是这么简单,#yyds盘点#
  17. android 拦截国外电话号码,Android拦截外拨电话程序示例
  18. 基于Mirai框架的QQ机器人使用文档----郑大科协2021招新群
  19. 物联网会成为移动互联网的下一个红海市场吗
  20. Rosetta中文教程(三)

热门文章

  1. JSZip的简单使用
  2. 风景园林设计专业要学哪些软件?这几款软件你一定要了解!
  3. 芯片厂商的电机控制方案
  4. linux ext4 磁盘修复,修复损坏的 ext4 大分区数据
  5. 龙芯2k1000-pmon(7)- pmon版本控制
  6. C语言实现蔡勒公式求周几
  7. DELL台式机安装centos系统
  8. 郝斌C语言 printf与scanf的用法
  9. (3/3) 在 Cocos creator 中使用 steam api , steam 成就
  10. 打印的几种方法(lodop、window.print)