彻底解决程序乱码问题

        由于程序编程过程中存在众多的编码集,而这些编码集又各自有自己的方法来表示一个中文字符。由此,造成我们的程序显示中文的时候乱码。最多的是本来是中文,但结果显示为问号?

       这篇文章从我碰到过的问题来从根本上解决乱码的问题,反正我用这个方法是百战百胜^_^嘎嘎

       我们知道,在我们的中文系统中使用的是“GBK”编码集。

       也就是说,比如我们从本地系统中读入一个包含中文内容的.txt文件,那么我们从这个磁盘空间所获得是流文件是个经过“GBK”的。

      但是,假如我们的JVM默认的编码集是“ISO-8859-1”,那么这个流文件经过我们的JVM编码就变成一个Unicode的字符或者字符串。

       是不是说的很抽象。

       下面我具体解释一下。

       什么是编码?编码说白了就是从字节到字符(Unicode)的过程,因为我们的字符或字符串在JVM中是用Unicode表示的,也就是说编码实质上是获取一个Unicode码的过程。

      我再来解释一下解码?解码就是把JVM里的Unicode码转换成我们本地字符集所表示的字节流。

     如果在编程过程中,JVM默认的字符集和我们的中文系统,或者数据库文件等采用的字符集不一样。

    这样的情况下,如果我们仅仅是编码,而不去解码。也就说把本来用“GBK”的字节流采用“ISO-8859-1”转换成字符或字符串,这个时候就产生了乱码。

    当然,现在JVM和中文系统默认的编码集已经一样了,所以产生这种情况的很少。但是在读取数据库文件的时候依然会经常碰到这种情况。所以,我一贯主张从本质上来了解一个知识,然后才能融会贯通,应用自如,这是高手的境界,当然,我不能算高手^_^哈哈

      好了,如果你现在还不明白编码解码怎么回事?以及乱码产生的原因。我想你可以去撞墙了。

     那么,编码的时候两个系统的字符集不一致,该怎么办呢?怎么样把他们变成一致?

     如果有可以直接改变系统字符集的方法,那当然是最好的了。比如在JVM里

   Properties pps = System.getProperties();

   pps.put("file.encoding","GBK");

   这样,就把JVM的默认字符集改变成“GBK”了。

    那么,如果没有改怎么办?

  什么?没办法?那是不可能滴,没有程序解决不了的问题,这也是偶滴名言,嘎嘎!

当然要再次编码了,或者说重新编码!

  还记得不?刚才我们解码的时候得到一个利用JVM解码的字符或字符串(也可以说Unicode)

 好,如果不记得,麻烦你再看看上面写的,记性太差了!

  我们利用这个字符或字符串再重新编码。

 我们把这个字符或字符串再次现出原形,也就是字节数组。

  byte[] data = str.getBytes("ISO-8859-1");

 好,现在又获得了“ISO-8859-1”字符集下的字节数组。

这个里面就完整的存放着我们想要的汉字,哈哈。

得到了字节数组,不就好办了吗?

还不会?没关系,我教你!

String newstr = new String(data,“GBK”);

好了,得到了我们完整的字符串了!编码变成!

这个字符串就是我们要的中文系统下的字符串,它又经过我们“GBK”编码过了!

可以放心的输出到中文系统下了。

其实说白了,编码解码就是把我们从系统得到的字符转换成字节数组,然后对它用系统字符集加工,加工完后再重新包装,再把它输出。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=664992


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
彻底解决 Spring MVC 的乱码问题,可以按照以下步骤进行操作: 1. 在 web.xml 配置文件中添加一个字符编码过滤器: ```xml <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 这个过滤器会将所有请求和响应的字符编码设置为 UTF-8。 2. 在 Spring MVC 的配置文件中设置字符编码过滤器: ```xml <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> ``` 这个配置会在处理请求和响应时使用 UTF-8 编码。 3. 确保项目中所有的 JSP 页面都设置了正确的字符编码: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ``` 通过以上步骤,你应该能够彻底解决 Spring MVC 的乱码问题。请注意,确保你的项目中使用的字符编码一致,一般推荐使用 UTF-8 编码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值