java InputStream乱码问题

wyc_ 2014-11-02 04:26:22
关键代码如下
byte[] buf = new byte[128];
int length = 0;
while((length = fis.read(buf))>0){
out.println(length);
out.println(new String(buf,0,length,"Unicode"));
}
其中读取的文件编码为Unicode,结果如下

为什么第二次读取的是乱码呢?
...全文
667 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjh_tostring 2014-11-03
  • 打赏
  • 举报
回复
编码转换下
public  String decodeUnicode(String theString) {      
		   
	    char aChar;      
	   
	     int len = theString.length();      
	   
	    StringBuffer outBuffer = new StringBuffer(len);      
	   
	    for (int x = 0; x < len;) {      
	   
	     aChar = theString.charAt(x++);      
	   
	     if (aChar == '\\') {      
	   
	      aChar = theString.charAt(x++);      
	   
	      if (aChar == 'u') {      
	   
	       // Read the xxxx      
	   
	       int value = 0;      
	   
	       for (int i = 0; i < 4; i++) {      
	   
	        aChar = theString.charAt(x++);      
	   
	        switch (aChar) {      
	   
	        case '0':      
	   
	        case '1':      
	   
	        case '2':      
	   
	        case '3':      
	   
	       case '4':      
	   
	        case '5':      
	   
	         case '6':      
	          case '7':      
	          case '8':      
	          case '9':      
	           value = (value << 4) + aChar - '0';      
	           break;      
	          case 'a':      
	          case 'b':      
	          case 'c':      
	          case 'd':      
	          case 'e':      
	          case 'f':      
	           value = (value << 4) + 10 + aChar - 'a';      
	          break;      
	          case 'A':      
	          case 'B':      
	          case 'C':      
	          case 'D':      
	          case 'E':      
	          case 'F':      
	           value = (value << 4) + 10 + aChar - 'A';      
	           break;      
	          default:      
	           throw new IllegalArgumentException(      
	             "Malformed   \\uxxxx   encoding.");      
	          }      
	   
	        }      
	         outBuffer.append((char) value);      
	        } else {      
	         if (aChar == 't')      
	          aChar = '\t';      
	         else if (aChar == 'r')      
	          aChar = '\r';      
	   
	         else if (aChar == 'n')      
	   
	          aChar = '\n';      
	   
	         else if (aChar == 'f')      
	   
	          aChar = '\f';      
	   
	         outBuffer.append(aChar);      
	   
	        }      
	   
	       } else     
	   
	       outBuffer.append(aChar);      
	   
	      }      
	   
	      return outBuffer.toString();      
	   
	     }    
Smynesc 2014-11-03
  • 打赏
  • 举报
回复
这种情况可能byte长度不足
JPF1024 2014-11-03
  • 打赏
  • 举报
回复
看下是不是你的控制台有问题。。 另外可以看下文件里面是不是乱码的了
wyc_ 2014-11-03
  • 打赏
  • 举报
回复
import static java.lang.System.*;
import java.io.*;
class Main16
{
public static void main(String[] args)throws IOException{
FileInputStream fis = new FileInputStream("read.txt");
System.setIn(fis);
byte[] buf = new byte[12];
int length = 0;
while((length=System.in.read(buf))>0){
System.out.print(new String(buf,0,length));
}
}
}

跟上面说的问题一样,文件内容如下
“用FileInputStream读取文件
第二行”,
buf足够大的时候没有问题,buf = new byte[10]的时候:

buf = new byte[12]的时候,运行如下:



wyc_ 2014-11-03
  • 打赏
  • 举报
回复
引用 6 楼 Smynesc 的回复:
这种情况可能byte长度不足
哈哈,第一次发帖,刚才学了一下如何回复。的确长度设为1024的话是可以的,也不会出现中文乱码,因为文件编码方式格式就是Unicode,这时候一次就把文件全部读完了。但是不能算解决问题的办法,万一文件很大呢。 我的文件内容如下,保存的时候选择的Unicode编码。 ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ 中文
疯狂熊猫人 2014-11-02
  • 打赏
  • 举报
回复
有Unicode这个字符集吗?
wyc_ 2014-11-02
  • 打赏
  • 举报
回复
第一次读的没有乱码,第二读的文件内容和第一次是相同的,却出现了乱码。奇怪
  • 打赏
  • 举报
回复
乱码一般和Unicode编码有关系,现在都用utf-8编码格式。
俺是小王子 2014-11-02
  • 打赏
  • 举报
回复
你的charset名字不对吧 你看一下charset类 试试 US-ASCII

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧