悬赏分:20- 解决时间:2009-7-27 15:25
import java.io.*;
public class InputReader {
public static void main (String [] args) throws Exception {
InputStreamReader isr=new InputStreamReader(System.in,\"iso8859-1\"); BufferedReader br=new BufferedReader(isr); String strLine=br.readLine();
//String str=new String(strLine.getBytes(\"gb2312\"),\"iso8859-1\"); for(int i=0;i isr.close(); System.out.println(strLine); //System.out.println(new String(strLine.getBytes(\"iso8859-1\"),\"gb2312\")); } } 这段程序中对于编码和解码的问题我很疑惑,在输入“中国”之后进入程序不是自动使用Unicode编码方式将“中国”编码成4e2d 56fd的形式么,然后用把它编码成iso8859-1么?本来程序输出是乱码,但是加上 System.out.println(new String(strLine.getBytes(\"iso8859-1\"),\"gb2312\")); 之后就成功了,这个语句的意思不是先把strLine字符串用gb2312编码,然后用iso8859-1解码成新字符串付给str么,最后通过system.out.println默认的gb2312方式编码输出么,中间我感觉很乱,有清楚中间各种转换过程的,能给我详细的解释下么!就是字符串在这个中是怎么一步步转换然后成功输出的! 问题补充: 1楼说的是先将字符串以iso8859-1的方式转换成字符数组,然后在利用string的getbytes的方法在进行一次编码?最后用gb2312的方式将字符转换?最后用默认的gb2312编码将字符输出?感觉有点乱! 提问者: duke881121 - 四 级 最佳答案 new String(strLine.getBytes(\"iso8859-1\"),\"gb2312\") 其实这里很好明白 首先将字符串转换成byte数组。。以iso8859-1的编码来转换。。 然后使用new String创建一个新字符串,前面带上byte[]数组 后面带上他的具体编码。。 一般转码都使用这样的方式。。JSP里经常出现乱码的 都是加上过滤器然后中间使用这个new String(strLine.getBytes(\"iso8859-1\"),\"gb2312\")方 式将编码转换。 因篇幅问题不能全部显示,请点此查看更多更全内容