java io读取流过程中打印读入的字节数组为什么会出现方框呢
如果说打印字节数组,为空的地方用方框填充,也不对啊。为什么读取流的时候,为空的地方就用方框填充呢,不明白问题,可以@我。求解啊。。。。对了说明下。这个aa.txt没有中文...
如果说打印字节数组,为空的地方用方框填充,也不对啊。为什么读取流的时候,为空的地方就用方框填充呢,不明白问题,可以@我。求解啊。。。。
对了说明下。这个aa.txt没有中文特殊字符只有一行aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 53个字符 展开
对了说明下。这个aa.txt没有中文特殊字符只有一行aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 53个字符 展开
3个回答
展开全部
编码问题,方框显示的是乱码。
因为记事本、editplus,notpad++等这些软件打开文本之后的默认编码是不一样的,你代码里面有转码操作,如果编码转换的不对就会出现乱码。
当然,文本里面的tab符,制表符等,在转码的时候也是不一样的。
而且java在处理UTF-8的编码的时候也会有bug存在,开发中一种通用的处理编码问题的方法就是用记事本打开,然后另存为,选择Unicode,保存。然后再转码基本就没有问题了
因为记事本、editplus,notpad++等这些软件打开文本之后的默认编码是不一样的,你代码里面有转码操作,如果编码转换的不对就会出现乱码。
当然,文本里面的tab符,制表符等,在转码的时候也是不一样的。
而且java在处理UTF-8的编码的时候也会有bug存在,开发中一种通用的处理编码问题的方法就是用记事本打开,然后另存为,选择Unicode,保存。然后再转码基本就没有问题了
更多追问追答
追问
我新建的最简单的文件,保存为utf-8,里面就4个字符abcd,打印一样的结果啊。代码一样。我用for循环打印这个byte数组,打印到没值的时候就没有值了。不是乱码问题。
追答
噢,是我没仔细看你的代码,你的代码里面声明了一个byte[1024],你这个byte大小是1024,所以你打印的方框是因为里面没有内容,也就是说,byte放置了你读取的内容之后,剩下的空间。
展开全部
你的aa.txt是用GBK或者GB2312编码的吗?方框意味着乱码。UTF-8这种编码格式每个字的字节数不同,有两个字节的有三个字节的,你把每个字节都打印出来,就有可能把一个字拆开了,所以会乱码
追问
内容只有aabb。任何编码都应该只占一个字节的啊。其他编码我试过了。。一样的,我觉得不像是乱码问题,按常理这些方框为空才对,就是木有啊。为什么会用方框占据呢,如果说打印字节数组为空的地方用方框占据,那为什么我上面第一行只打印a而不是a后面补方框呢,刚我遍历了下这个字节数组,它打印完第53个字符,后面的方框都是空字符串。没打印。
追答
我只能说是你转换的时候出了问题,你可以直接打印一下sb,应该没有框。在转化的时候,后面的空字符也被转换成UTF-8的格式了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sb定义成1024的长度,
前面的in.read(sb,0,53)只是将读入的53个字符放到sb的钱53个字符中而已,
sb还是1024长度,你需要人为截断。
如
String s=new String(sb,"UTF-8");
//System.out.println("s.length="+s.length());
System.out.println("s.length="+s.substring(0,an));
前面的in.read(sb,0,53)只是将读入的53个字符放到sb的钱53个字符中而已,
sb还是1024长度,你需要人为截断。
如
String s=new String(sb,"UTF-8");
//System.out.println("s.length="+s.length());
System.out.println("s.length="+s.substring(0,an));
更多追问追答
追问
目的不在于获取文件的内容,获取文件的值我可以通过BufferReader,也可以初始字节数组的时候把长度定义成in.available().,我只是搞不懂。为什么后面打印为方框呀。
追答
sb的长度一直是1024长度
new String(sb,"UTF-8")返回的也是一个1024位长度的字符串,
除了前面53个已知字符外,后面的全是空值,打印出来就是方框。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询