Java中乱码

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

时间: 2024-10-18 04:51:07

Java中乱码的相关文章

GDAL在java中乱码问题解决方案

[前序] 首先关于GDAL源码方面,GDAL开源项目源码是使用C++语言所写,通过源码的编译可以生成支持一系列语言如c++/java/php/csharp/perl/python/ruby开发所依赖的第三方包或头文件.GDAL的同时支持不同平台下的编译生成,在Win平台下使用起来出现的问题较多,比如编译时选择不同的编译选项32位或x64位产生出不同的依赖库,还有中文路径.中文读写问题等等. 在使用GDAL在java环境下进行读写数据文件时,遇到java语言读tab数据源出现乱码问题,具体的情况描

JAVA 中URL中文参数乱码的处理方法(汇总)

解决输入的全角汉字或者日文在URl中乱码的问题.以下我的实现 JS代码: function shiborikomuFw() {     var url = '${url08}';     var str = document.getElementsByName('fw');     //Str str = document.getElementsById('fw').Value;     for (var i = 0; i < str.length; i++) {     url = url +

java中IO及中文乱码问题

第一次发这种博客,所以一直在纠结怎么开头,干脆直奔主题吧,把自己的一些总结体会记录下来,先从简单的学习开始,希望可以慢慢坚持,以后的内容可以写的更好更有意义. 其实真正在工作中中文乱码的问题遇到的不多,那是因为公司为了开发方便所以文件都统一编码了.但是我觉得还有很有必要去稍微了解一下其原理的. IO就是输入输出流,用面向对象来理解的话,就是输入,输出流对象,主要用来操作文件对象.所以再稍微谈谈文件的概念,即File对象.在Java中,File不是我们平时生活中指的某个具体文件,而是某个路径对象,

Java中关于乱码的认识和解决办法

前几天在使用中兴的MM7接口开发一个彩信的应用,可是在测试的时候,手机收到的文本内容总是一堆乱码,不管怎么修改参数问题都得不到解决,于是就狠狠的琢磨和研究了下关于编码的内容,最终成功解决了乱码的问题. 我们都知道Java语言使用的是Unicode编码.可是大家是否真的已经理解了这句话的含义? Unicode编码和我们常用的UTF-8,GBK有什么关系呢? 那接下来就来讨论下这个话题. 不知大家还有没想过,我们在Java代码里面定义一个字符串字面量的时候,该字符串在JVM中的编码是什么?  是的,

文《关于c++与java中文乱码问题分析与解决》中一个bug分析

文<关于c++与java中文乱码问题分析与解决>中一个bug分析 DionysosLai([email protected]) 2014/10/21 在前几篇一博客<关于c++与java中文乱码问题分析与解决>,地址如下:http://blog.csdn.net/dionysos_lai/article/details/38389765.文中详细介绍了c++与java数据传递时,为何会出现中文乱码的原因,并提出了适当的解决方法.方法如下: int CCDirector::GBKTo

Java中使用FileputStream导致中文乱码问题的修改方案

1 package com.pocketdigi; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStreamReader; 8 import java.io.OutputStreamWriter; 9 10 public class Main { 11

【Java】无须额外的包,把Java中的内容输出到Excel中,无乱码,绝对兼容Excel2003与2007

Java输出一段文本到txt中大家基本都会了,这已经是学习Java的必修课了,不会也没有问题,具体可以看<[Java]输入与输出与JDK1.5之后的新型字符串StringBuilder>(点击打开链接).网上对于Java内容转化成Excel的内容大多数都是需要什么poi包,jsl包,一堆奇奇怪怪的jar插件.其实仅仅利用java.io.*;这个基本包就能够把Java中的内容输出到Excel表中,当然,如果你是要处理Mysql数据库不要这样做了,直接一条Mysql的查询命令就能把Mysql的查询

java中字符输入输出流在输出结果的结尾多一个乱码字符:&#39;?&#39;

原因以及解决方法: 核心方法如下: 1 public static void main(String[] args) throws Exception{ 2 // TODO Auto-generated method stub 3 4 FileReader fr=new FileReader("test.txt"); 5 FileWriter fw=new FileWriter("test2.txt"); 6 7 /*int b=0; 8 while(b!=-1){

java中向Mysql插入中文字符出现乱码

昨天新建了个Mysql数据库表,在JAVA中插入中文字符时,发现数据库中的插入结果是乱码.实际是字符集不符合问题. 针对这个问题的解决方法有很多,例如这个文章java与mysql乱码的问题不过我建议将表删掉重新建表,建表时默认字符集设置为UTF-8,这样可以避免以后出现各种问题. 可以通过语句show create table table_name来查看该表的编码格式.例如我的是: CREATE TABLE `blog` ( `title` varchar(30) NOT NULL DEFAUL