import java.util.*;class Test
{
public static void main(String[] args) throws Exception
{
int data;
byte[] buf=new byte[100];
int i=0;
while((data=System.in.read() )!='q') //输入 q 退出
{
buf[i]=(byte)data;
i++;
}
String str=new String(buf,0,i);
System.out.println(new String(str.getBytes("ISO-8859-1"),"ISO-8859-1"));
}
}输入一个汉字,为什么输出的是乱码 ?
假设输入“程序”两字,一个汉字占两字节,假设在十六进制下的GBK 码是:12 34 56 78 。那么存在buf 字节数组中的内容也就是:12 34 56 78 。接下来按 GBK 解码得到字符串 str ,内容是“程序”,正确!然后 str内容 按 ISO-8859-1 编码。str内容 两个汉字占4个字节,虽然 ISO-8859-1 是按单字节编码,那么四个字节应该要编码4次,然后按 ISO-8859-1 解码。应该得到4个字节的内容吧,那为什么输出的只有2个问号 ?(Jbuilder9 下测试)
{
public static void main(String[] args) throws Exception
{
int data;
byte[] buf=new byte[100];
int i=0;
while((data=System.in.read() )!='q') //输入 q 退出
{
buf[i]=(byte)data;
i++;
}
String str=new String(buf,0,i);
System.out.println(new String(str.getBytes("ISO-8859-1"),"ISO-8859-1"));
}
}输入一个汉字,为什么输出的是乱码 ?
假设输入“程序”两字,一个汉字占两字节,假设在十六进制下的GBK 码是:12 34 56 78 。那么存在buf 字节数组中的内容也就是:12 34 56 78 。接下来按 GBK 解码得到字符串 str ,内容是“程序”,正确!然后 str内容 按 ISO-8859-1 编码。str内容 两个汉字占4个字节,虽然 ISO-8859-1 是按单字节编码,那么四个字节应该要编码4次,然后按 ISO-8859-1 解码。应该得到4个字节的内容吧,那为什么输出的只有2个问号 ?(Jbuilder9 下测试)
解决方案 »
- 不能连接到VM
- 超级简单的问题,求一段 java 读取 property 属性文件的代码? 100分
- 请教一个问题。在线等
- 新手发问,一个小问题
- 想问个java中I/O的问题
- 关于JAVA基础问题String s1 = "xxx"; String s2 = "xxx"; String s3 = s2; String s4 = new String("xxx")的理解,大家帮我看看对不对!
- 初次提问,向大家求教: 获取日期和星期方法!!
- 请问关于路径设置的问题
- ★★★★★★大好消息! java I love you for ever! sun 胜利了!法官裁定:120天内微软必
- Jbuilder6那里可以down???
- JSP中为什么找不到我的类
- 哪有CVS源代码?急!!!!
这里已经成功的构造了字符串
输入汉字时jvm会自动用默认的字符集去生成byte数据
而你构造String时也是用的默认的字符集new String(str.getBytes("ISO-8859-1"),"ISO-8859-1"))会生成乱码的原因是
str.getBytes("ISO-8859-1")把非ISO-8859-1编码的汉字转换成字节时就会用"?"去代替汉字
汉字的代码完全丢失了,当然就回不来了可以参考我的blog中相关的介绍:
http://blog.csdn.net/polarman/archive/2007/04/30/1593159.aspx
有两样的。默认的 GBK 码。我换成 ISO-8859-1 码来解 再遍。和直接输出有区别
************************************************************************************new String(str.getBytes("ISO-8859-1"),"ISO-8859-1"))会生成乱码的原因是
str.getBytes("ISO-8859-1")把非ISO-8859-1编码的汉字转换成字节时就会用"?"去代替汉字
汉字的代码完全丢失了,当然就回不来了
================================================那转换成4 个字节,也要有4 个问号才对
http://www.regexlab.com/zh/encoding.htm如果有汉字, new String(str.getBytes("iso-8859-1"), "iso-8859-1") 将必然得到乱码