OutputStream 输出有乱码
BufferedReaderbr=newBufferedReader(newInputStreamReader(con.getInputStream(),"GBK"));...
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"GBK"));
int temp=0;
OutputStream out=new FileOutputStream(new File("D:"+File.separator+"test"+File.separator+"output.xml"),true);
while((temp=br.read())!=-1){
out.write(temp);
}
out.flush();
out.close();
br.close();
output.xml输出中有乱码,怎么解决啊? 展开
int temp=0;
OutputStream out=new FileOutputStream(new File("D:"+File.separator+"test"+File.separator+"output.xml"),true);
while((temp=br.read())!=-1){
out.write(temp);
}
out.flush();
out.close();
br.close();
output.xml输出中有乱码,怎么解决啊? 展开
3个回答
2015-10-24 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464986
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
那并非乱码。
ObjectOutputStream.writeObject()的作用是把一个实例的对象以文件的形式保存到磁盘上,这个过程就叫Java对象的持久化。
而这个文件是以二进制的形式编写的,当你用文本编辑器将它打开,这些二进制代码与某个字符集映射之后,显示出来的东西就成了乱码。
即使输出的是一个String的对象,也是以该String对象的二进制编码的形式输出,而不是输出String对象的内容。
ObjectOutputStream.writeObject()的作用是把一个实例的对象以文件的形式保存到磁盘上,这个过程就叫Java对象的持久化。
而这个文件是以二进制的形式编写的,当你用文本编辑器将它打开,这些二进制代码与某个字符集映射之后,显示出来的东西就成了乱码。
即使输出的是一个String的对象,也是以该String对象的二进制编码的形式输出,而不是输出String对象的内容。
展开全部
你输出时也采用gbk
出错的原因有可能是你 当前项目编码不是gbk
在你写入文件里时默认编码就为当前项目编码 就会出现乱码。
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(
new FileOutputStream(file), "gbk"));
出错的原因有可能是你 当前项目编码不是gbk
在你写入文件里时默认编码就为当前项目编码 就会出现乱码。
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(
new FileOutputStream(file), "gbk"));
追问
刚试了一下,用这个PrintWriter输出的时候,中文的部分还是乱码啊,
追答
你说了数据来源是 utf-8 编码的 的用gbk编码肯定乱码了
utf-8 3个字符一汉字
gbk 2个字符一个汉字
你吧读与写的编码都改为uft-8
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要检查
1. 你的inputStream里的字节流是不是由GBK编码的字符解码后的字节
2. 如果1没问题, 那么你的流中是可以由GBK编码后得到正确的字符的字节流
3. 如果上面都正确, 此时你的int temp 强转成char是正确的, 即是一个正确的字符(不是乱码)
4. 你用一个stream流来写文件.... temp是一个int, out是stream流, out.write(int)只会写int的低8位, 这里会丢失字节
5. 你如果用writer来写文件, 默认编码是系统的默认编码, 即ANSI, 也就是GBK, 是没有问题的, 但是如果你是工程, 有可能会使用工程的默认编码, 如果你工程的默认编码是UTF8那会出现乱码
6. 如果上述步骤都没有问题, 那么你写的那个文件必须预先是GBK编码, 即ANSI编码, 如果那个文件预先是UTF8编码, 会出现乱码
1. 你的inputStream里的字节流是不是由GBK编码的字符解码后的字节
2. 如果1没问题, 那么你的流中是可以由GBK编码后得到正确的字符的字节流
3. 如果上面都正确, 此时你的int temp 强转成char是正确的, 即是一个正确的字符(不是乱码)
4. 你用一个stream流来写文件.... temp是一个int, out是stream流, out.write(int)只会写int的低8位, 这里会丢失字节
5. 你如果用writer来写文件, 默认编码是系统的默认编码, 即ANSI, 也就是GBK, 是没有问题的, 但是如果你是工程, 有可能会使用工程的默认编码, 如果你工程的默认编码是UTF8那会出现乱码
6. 如果上述步骤都没有问题, 那么你写的那个文件必须预先是GBK编码, 即ANSI编码, 如果那个文件预先是UTF8编码, 会出现乱码
更多追问追答
追问
步骤1和步骤2都符合,工程是默认的编码utf-8的,如果改为GBK,会出现乱码的,输出的时候我不知道该怎么写了,out.xml中中文的都是乱码
追答
下午帮你再分析下 上班后 哈
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询