文档章节

Java中乱码

零下三度
 零下三度
发布于 2014/09/24 11:48
字数 580
阅读 147
收藏 8

         Java开发中经常会遇到乱码问题。网上提供了各种解决乱问题的方案,比如说Http请求的中文乱码问题,可以通过URLEncoder和URLDecode去解决,虽然问题解决了,但是不优雅,你会发现为了解决乱码问题,代码中增加了几行代码,而且请求端和响应端都要增加URLEncoder和URLDecoder的代码,两边的人员都不爽,都指定了字符集了,还要转码,这样很不优雅。

        其实解决乱码问题很简单,乱码出现的地方肯定是有数据流操作,我们需要秉承一个原则“用什么字符集写,就应该用什么字符集读”。

       常见中文乱码解决方案:

       1.HTTP的POST请求中文乱码可以通过过滤器去设置HttpRequest的字符集。

       2.HTTP的GET请求中文乱码解决方案有两种,一种是new String(request.getParamter("name").getByte("ISO-8859-1"),"UTF-8");另外一种方案,是通过web服务器指定URL请求的字符集。

       3.Response可以通过response.setCharacterEncoding("UTF-8");response.setContentType("application/html; charset=utf-8");来设置响应信息的字符集

       4.最后一种情况经常让人抓狂,明明自己设置了Response的字符集,但是还是乱码。呵呵,丫的,PrintWriter out = response.getWriter();需要在3步后面。就是说先指定响应信息的字符集,然后根据这个字符集获取输出流,否则响应的默认字符流是ISO-8859-1。

       5.文件操作时,记住写入的流的字符集,读出来的流要使用写时候的字符集,解决中文乱码问题。

       总结:用什么字符集去写,就需要用什么字符集去读。

      多说一些,网上很多提出了 new String(val.getByte("ISO-8859-1"),"GBK");这个东西经常误人子弟,如果你的val字符串实际上是已经根据指定字符集的字符串,解决乱码问题还是坚持原则,追根溯源!网上的资源需要认真筛选。


© 著作权归作者所有

上一篇: memcached初体验
下一篇: 浅谈ThreadLocal
零下三度
粉丝 8
博文 11
码字总数 13153
作品 0
朝阳
程序员
私信 提问
Tomcat中文乱码问题的原理和解决方法

Tomcat中文乱码问题的原理和解决方法   自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享。   一、Java中文问题的由...

孙斐
2013/02/26
0
0
一例 jvm file.encoding 属性引起的 MapReduce/HBase 乱码问题

1、问题: 最近在往 HBase 写中文的时候,发现 hbase 查出来的数据会有部分中文乱码了,而部分中文又是正常的,按理来说,一般的乱码问题要么全乱,要么不乱。考虑到出现中文的地方都是来源于...

大数据之路
2013/08/28
0
4
关于Sybase数据库乱码问题

后端语言是Java的 我从Sysbase数据库中查数据的时候,数据出现乱码,但在Xmanager管理工具中查的数据是正常的 例如 SGSDC02 这个数据 在Java端取出来的值在最后出现了一个乱码字符SGSDC02[],请...

Zofda
2011/04/15
1K
1
tomcat html htm静态文件乱码utf-8的有关问题正文

tomcat html htm 静态文件乱码utf-8 的问题 在tomcat运行的时候很多情况下静态文件包括html css js都是乱码的我从网上搜索出来的解决方案都好像不行. 后来自己仔细的想了一下最终其实就是jav...

longbadx
2014/03/26
0
0
MenuItem 显示中文乱码问题解决方案

MenuItem 显示中文乱码问题解决方案 今天在使用Java做系统托盘图标(TrayIcon),需要为其增加一个右键弹出菜单(PopupMenu),在使用菜单项(MenuItem)时,遇到了一个非常痛苦的事情:中文乱码~...

Java编程思想
2013/10/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql免安装版,服务无法启动没有抱任何错误

1.解压 2.新建my.ini [mysqld]# Remove leading # and set to the amount of RAM for the most important data# cache in MySQL. Start at 70% of total RAM for dedicated server, e......

榴莲黑芝麻糊
41分钟前
0
0
Qt编写安防视频监控系统3-通道交换

一、前言 最开始写通道交换的功能的时候,走了很多弯路,比如最开始用最初级的办法,触发交换的时候,先关闭视频,然后设置新的url重新打开视频,这样处理非常低级而且耗内存还卡还很慢,毕竟...

飞扬青云
42分钟前
0
0
如何远程调试部署在CloudFoundry平台上的nodejs应用

网络上关于如何本地调试nodejs应用的教程已经很多了,工具有Chrome开发者工具,Visual Studio Code,和nodejs周边的一些小工具等等。 在实际情况中,我们可能遇到本地运行良好,但是部署到C...

JerryWang_SAP
今天
5
0
微信扫码访问网站调用默认浏览器打开如何实现?

我们在微信内分享链接或二维码的时候,我们会发现我们的网站是可以在浏览器里正常打开的,但就是不能在微信里打开,提示 “ 已停止访问该网页 ”,无论是聊天框也一样。说是系统检测到您的网...

明尼苏达哈士奇
今天
4
0
一份Java程序员进阶架构师的秘籍,你离架构师还差多远

一、如何定义架构师 Java架构师,首先要是一个Java程序员,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,怎么解决并...

我最喜欢三大框架
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部