为了账号安全,请及时绑定邮箱和手机立即绑定

java编码的问题

java编码的问题

sntatas 2016-05-05 21:08:29
文本文件编码为utf-8,eclipse设置的工作环境为gbk编码 输出的文本文件,比原文件多了一个?代码如下public class Main { public static void main(String[] args) throws IOException { File file = new File("f:\\temp\\1.txt"); InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8"); //FileReader fr = new FileReader(file); FileWriter fw = new FileWriter("f:\\temp\\2.txt"); //OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream("f:\\temp\\2.txt"),"utf-8"); // byte[] b = new byte[2*1024]; int l; while ((l = isr.read()) != -1) { fw.write(l); } fw.close(); isr.close(); } }
查看完整描述

1 回答

已采纳
?
冥幻影

TA贡献5条经验 获得超0个赞

FileWriter在写出文件时是以系统默认的编码格式输出的,你输入文本指定为utf-8,但是你指定输出文件输出使用不同编码,所以多了一个问号,因此对于一些不同编码格式容易产生乱码,尤其对于中文字符, 在使用时应格外留意。为了解决这个问题,可以使用OutputStreamWriter方法并且指定编码。

查看完整回答
反对 回复 2016-05-05
  • sntatas
    sntatas
    为什么是多出一个"?",我用其他文本测试也是多出了一个"?",是java用于提醒前后文本的编码不一致吗?
  • 冥幻影
    冥幻影
    在UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0×20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符,所以转换后会显示为“?”号,只是显示为问号而不是真正的问号,所以无法被替换!
  • sntatas
    sntatas
    原来如此,非常感谢!
  • 1 回答
  • 0 关注
  • 1558 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信