`
mayufenga1
  • 浏览: 55513 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

字符串乱码问题汇总

阅读更多

转载:http://yhx20012.blog.sohu.com/118439098.html

一、避免乱码的一些注意点:
1.尽量使用统一的编码,如果你是重头开发一个系统,特别是Java开发的,推荐从页面到数据库再到配置文件都使用UTF-8进行编码,安全第一。
2.SetCharacterEncodingFilter 的使用,这个东西不是万能的,但是没有它就会很麻烦,如果是基于Servlet开发的东西,能用的就给它用上,省心。不过有一个注意的地方,这个 Filter只是对POST请求有效,GET一律忽略,不信你可以debug一下,看看它怎么做的,至于为什么不过滤get请求,好象是它对GET请求是 无能为力的。
3.就如上面所说,GET请求有问题,尽量使用POST请求,这个也是Web开发的一个基本要领:
Web Health Warning:Put All Destructive Actions Behind a POST method(from Agile Web Development with Rails)
有点扯远了,不过少用GET,是会有回报滴。
4.JavaScript 和Ajax乱码的避免,注意JavaScript默认是ISO8859的编码,避免JS/AJAX乱码和GET一样,不要在URL里面使用中文,实在避免 不了,就只能在生成链接的时候转码,绝对不能想当然的认为SetCharacterEncodingFilter会帮你做什么事情。
5.尽早统一开发环境,早点模拟真实环境测试,这个好像也有跑题的嫌疑,但凡软件开发都是这么干的,但仍然值得注意。我这出现过一次状况,程序是在Win下编译的,拿去Linux上测试没问题,等实际部署的时候代码是在Linux下编译,结果乱码,秋后算帐总觉得有点晚。

二、乱码发生的情况和应对措施
1.开发环境乱码
      由于Java默认使用UTF-8编码,而且网上很多人都建议Struts开发的时候应尽量选用UTF-8做为默认编码,而非GBK。IDE使 用Eclipse,在第一次使用Eclipse的时候应将default text editor改为UTF-8编码,免得日后后悔再改就惨了,我本次开发的时候就忽视了这一点,刚开始没注意,结果到快交工时乱码问题无法解决,导致将所有 的文件全部修改一遍,呜……
      自打使用Ubuntu,我就开心的笑阿,再也不用为搞这些乱码问题而烦恼^^(Ubuntu公益广告)
2.POST请求的过滤
      这个是最基本的了,每个Servlet系统基本都会用到这个东西。不过只对POST请求有效,这个挺关键的。
      使用SetCharacterEncodingFilter,这个很基础的一套过滤器,将所有来自页面的POST请求全部过滤为UTF-8编码。
3. JSP ,HTML页面乱码
     将JSP页面全部改为charset=UTF-8,这样可以保证与后台交互的时候都是UTF-8编码,一般应用做了以上工作就基本可以应付了。
4.资源文件中汉字转化UTF-8字符问题
      国际化问题,在使用资源文件的时候,由于中文在properties文件中无法被程序所识别,需要将其进行转码,我在资源文件下面制作了一个很简单的 bat文件,每次修改资源文件的时候都是在一个临时文件中修改,然后执行这个bat文件,将其转化并保存为所需要的资源文件,这个动作挺烦的,也有项目组 成员使用一些插件,但是那些东西都是直接写UTF-8码的,有时候反倒不方便,不过以后任务量巨大的时候可能会考虑使用。Bat文件内容:   set path=%path%;%JAVA_HOME%/bin/,native2ascii -encoding UTF-8 ApplicationResources_bk.txt > ApplicationResources_zh.properties

     PS:上面的方法好老了,实际操作起来相当麻烦,现在基本都是使用Eclipse插件,Eclipse3.1时使用PropertyEditor,但是这 个项目看上去好像停摆了,到Eclipse3.2时改用了ResourseBundle,相当的强劲的一个插件,推荐使用。
5. GET请求乱码
      如果在本项目中采用了get方式提交请求并附加参数,结果导致编码乱码,原因是Tomcat默认请求编码是ISO8859,需要在Tomcat的配置文件 server.xml添加一个参数,URIEncoding=”UTF-8”,这样请求中附件的参数就会以UTF-8来进行编码。

  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />
6.Ajax请求乱码
    使用Ajax,JS也是默认使用ISO8859编码,所以在进行请求时遇到中文参数需要进行编码,如:var url = "GetSelectListAction.do?queryData=subTrade" + "&queryId=" + encodeURI(obj.value) + "&r=" + Math.random();  
    这里有两个地方需要注意:第一个地方是encodeURI(),方法,可以将参数进行转码,默认是转化为UTF-8,如果需要转为其他码制,需要在方法中添加第二个参数。
     第二个地方是Math.random(),由于Ajax有缓存机制,在接受请求的时候第一时间先判断该请求的地址是否被访问过,如果被访问过则 直接使用缓存中的内容返回,这个东西很讨厌,客户在访问过一次出错后以后每次出现的都是这个错误,所以在请求中给其增加一个时间戳,只要可以随机生成一个 不同的字串就可以,保证Ajax每次都去访问服务器。
7. GET方法的另一个乱码问题
      在项目即将交工的时候突然又出现乱码问题,发现对于超长的汉字做为参数传递仍然会出现乱码问 题,解决方法是采用java.net.URLEncoder的 Encode方法强制转码,缺点是会使JSP页面代码相当的长,但是目前还没有其他好的解决办法,我想最好的办法就是不用中文做为参数传递 :P,写法如:<a href="TestAction.do?name=<%= java.net.URLEncoder.encode("你好","UTF-8")%>

8.乱码仍然是偶们的心病,一直牵动着大家的心,最近一位朋友说连接MSSQL数据库有乱码,使用了很多办法,都没解决,后来重新下了个新的驱动搞定……
数据库乱码其实也很讨厌的,一般来说驱动问题比较常见,所以一旦碰到比较难缠的乱码可以先考虑下换换驱动。也有如MySQL这种,直接连接的时候就需要显示进行编码转化的,这个就要不同情况区别对待了。

//2007年11月30日添加
9.WebService乱码,由于对WebService不怎么熟悉,使用的是Weblogic提供的WebService支持,乱码再次出现搞得手忙脚乱,而且无从下手,在自己系统上跑都没有问题,结果跑到服务器上就全乱套,又无法调试,愁人。
    反复尝试的过程就不说了,绝对比普通的Web开发麻烦的多。最终解决方法:
    A.为WebService服务也加上一个filter,WebService也是走HTTP协议的,这个东西同样有用,先得加上。
    B.修改服务器上的环境变量,LANG=zh_CN.UTF-8,改成这个是为什么我仍然说的不是很清楚,不过当时开发人员就是在Win下开发的,我在自 己的Ubuntu上测试没问题,拿到Redhat服务器上就不行,因为服务器上默认的是LANG=en_US.UTF-8,这个明显是不支持汉字的。
    经过这两个步骤WebService乱码总算得到抑制,它主要的麻烦在于所有与协议有关的东西都被Weblogic包办,里面做什么事情我们不好控制,所 以只能采取这种比较笨的办法,虽然解燃煤之急但无法寻根溯源的搞定它,说不定哪天又会出来搞鬼。果然又一次出现乱码问题,经过比较环境变量发现服务器上的 LC_CTYPE被修改了,所以强制改成LC_CTYPE=zh_CN。修改环境变量的方法不到万不得已不推荐使用

 

分享到:
评论

相关推荐

    php中url地址栏传参数中文乱码解决方法汇总

    PHP 中 URL 地址栏传参数中文乱码解决方法汇总是指在 PHP 编程中,如何解决 URL 地址栏传参数中文乱码的问题。这个问题是由于浏览器和服务器之间的编码问题引起的。 url 编码语法: 在 PHP 中,url 编码语法使用 ...

    php实现中文字符截取防乱码方法汇总

    大家在自己的程序中相信都会经常用到截取字符串吧,但是往往遇到截取中文字符串的时候会遇到乱码的问题。很是让人头疼,接下来介绍两种方法防止截取中文字符串的时候出现乱码的问题。 首先第一种,自己写好的一个...

    java web 开发乱码汇总

    需要注意的是,`encodeURI()`默认将字符串转换为UTF-8编码。 ##### 6. 数据库操作乱码 在使用MySQL数据库时,需要确保连接数据库时指定正确的字符集,例如使用`jdbc:mysql://localhost:3306/jsp?useUnicode=true&...

    java 中的乱码问题汇总及解决方案

    3. 字符串转换:字符串的字节表示与实际的字符编码不匹配。 4. 类似FileReader这样的类,默认使用系统默认编码,如果不指定编码,可能导致乱码。 **解决方案示例** 1. 明确指定编码:在创建InputStreamReader或...

    PHP实现自动识别原编码并对字符串进行编码转换的方法

    通过该方法,我们可以确保在处理文本数据时,不论原始文本是以何种字符编码形式存储的,都能够将其转换成目标编码格式,如常见的UTF-8编码,从而解决乱码问题,提高数据的兼容性和准确性。 在详细讲解知识点之前,...

    .Net获取URL中文参数值的乱码问题解决方法总结

    文章提到的“***操作json技巧总结”、“***字符串操作技巧汇总”、“***操作XML技巧总结”、“***文件操作技巧汇总”、“*** ajax技巧总结专题”以及“***缓存操作技巧总结”这些专题都是对.NET开发中常见问题的解决...

    Java Web开发项目中中文乱码解决方法汇总

    在JDBC连接字符串中,可以指定使用`useUnicode=true&characterEncoding=utf-8`来确保与数据库交互时的编码一致性。对于Eclipse等开发工具,还需要确保项目编码设置为UTF-8,避免编辑器内部处理的编码问题。 总之,...

    RCP相关问题汇总

    - 修改源代码文件的编码格式为 UTF-8,确保所有的字符串都使用正确的引号关闭。 - 如果是资源文件(如 properties 文件)的乱码问题,需要确保这些文件的编码也是 UTF-8,可以在 Eclipse 中通过属性设置进行修改。 ...

    springmvc 发送ajax出现中文乱码的解决方法汇总

    Spring MVC默认使用`StringHttpMessageConverter`处理字符串类型的数据,其默认字符集为ISO-8859-1。可以通过自定义该类并覆盖其默认字符集为UTF-8,然后替换jar包中的实现。但这种方法并不推荐,因为它涉及到对...

    很不错的PHP面试题汇总

    1. **日期和时间处理**: ...以上就是这份PHP面试题汇总中涵盖的知识点详解,涵盖了基础语法、数据库操作、字符串处理、面向对象编程、Web服务器交互等多个方面。理解和掌握这些知识点对于PHP开发者来说至关重要。

    Amazon面试在线测试题汇总

    字符串旋转是一种常见的编程题目,要求应聘者编写一个程序或函数,通过指定的方式对字符串进行旋转处理。 另外,文件中还提到了“GrayCode”,格雷码(Gray Code)是一种二进制数码系统,其中两个连续的数值仅有一...

    C语言面试题大汇总.pdf

    C语言面试题通常会涵盖C语言的基础语法、数据类型、预处理指令、内存管理、指针操作、函数、数组、字符串处理、结构体等知识领域。根据提供的部分文件内容,以下是相关知识点: 1. 关键字使用:例如,文件中出现了...

    java的文件操作汇总

    另外,还有CharArrayReader和StringReader分别用于从字符数组和字符串中读取字符数据,以及PipedReader用于在多线程环境中通过管道进行数据传输。 File类是Java中用来处理文件和目录的对象,它并不直接参与文件内容...

    PHP面试题及答案,另附学习心得

    **解答**: 使用`mb_substr()`函数,它可以正确处理多字节字符,避免截取中文字符串时出现乱码问题。 #### 十一、变量引用与赋值 **题目**: 分析以下代码执行结果。 **代码**: ```php $a = "hello"; $b = &$a; // ...

    MapReduce.pdf

    在map方法中处理字符串时,可以使用字符编码转换的方式解决乱码问题,比如将字符串的byte数组转换为GBK格式的字符串。 在实现MapReduce程序之前,需要在计算机上安装JDK,这是因为Java是编写MapReduce程序的必需...

    使用AJAX实现UTF8编码表单提交到GBK编码脚本无乱码的解决方法

    本文将探讨如何使用AJAX技术解决UTF8编码的表单提交到GBK编码脚本时出现的乱码问题,以及如何处理不同编码的表单数据在同一个页面上的汇总。 首先,了解基本的编码知识是必要的。GBK是基于GB2312的汉字编码标准,它...

    功能样机评审表-5页.pdf

    而【部分内容】提供了一系列看似含有特定代码、字母和数字的字符串,这些内容很可能是一串扫描文档后产生的乱码,且文档标题中提到的“功能样机评审表”并没有给出具体的评审标准、流程或是评审的具体内容,因此很难...

Global site tag (gtag.js) - Google Analytics