UTF-8转GBK时的一个有关问题

   阅读
UTF-8转GBK时的一个问题
需求:读取一个编码格式为utf-8的文件,将其内容写入到一个编码格式为GBK的文件
代码:
StringBuffer contents=new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("d:/UTF-8.txt"),"utf-8"));
String str;
if((str=br.readLine())!=null)
contents.append(str);
while((str=br.readLine())!=null){
contents.append("\n"+str);
}
br.close();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("d:/new.txt"), "gbk"));
pw.print(contents.toString());
pw.flush();
pw.close();
运行后用UE打开new.txt文件,发现在第一行最前面多了一个问号,用16进制打开多了一个字节:3F
这是为什么?如何修改代码以满足需求?
------解决思路----------------------
代码应该是对的。

看看是不是那个uft8文件的问题。
你可以用程序先写一个utf8文件,随便写一些内容,再将这个uft8文件用程序转,看看效果
------解决思路----------------------
一般如果用文件编辑器编辑过再保存,它都会自动的在前面加个  BOM, 对于你想导入导出纯数据的情况下,我们不应该用文本编辑器来编辑它,或者你需要保证不要让编辑器自动添加 BOM,因为 BOM 本身是给编辑器看的,不是给其它程序看的,它不属于数据部分。

引用:
Quote: 引用:

代码应该是对的。

看看是不是那个uft8文件的问题。
你可以用程序先写一个utf8文件,随便写一些内容,再将这个uft8文件用程序转,看看效果

问题解决了,用程序写的utf8文件没有这个问题,对比后发现原因是因为原来的那个文件是有bom的,所以转换时会把utf8中的bom:EF BB BF 转换为gbk中的3F

------解决思路----------------------
来晚了,一看就是BOM嘛!
阅读