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字符串实际上是已经根据指定字符集的字符串,解决乱码问题还是坚持原则,追根溯源!网上的资源需要认真筛选。