A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 白磊 于 2013-9-12 16:36 编辑

我这个使用字符流做的,拷贝文件后,其中的汉字无法显示(但是用字节流来写的话就好着呢),就几个黑点,是什么情况,操作汉字也属于操作字符的吧?那为什么会这样,求解释。。。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CopyTest1 {

public static void main(String[] args) {
  
  BufferedReader br = null;
  BufferedWriter bw = null;
  try {
   br = new BufferedReader(new FileReader("C:\\Documents and Settings\\user\\桌面\\11\\当前文件.txt"));
   bw = new BufferedWriter(new FileWriter("C:\\Documents and Settings\\user\\桌面\\11\\dest.txt"));
  } catch (Exception e) {
   e.printStackTrace();
  }
  String line = null;
  StringBuilder strb = new StringBuilder();
  try {
   while((line=br.readLine())!=null){
    strb.append(line);
    bw.write(line);
    bw.flush();
    bw.newLine();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
  finally{
   try {
       if(bw!=null)
     bw.close();
    if(br!=null)
     br.close();     
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}


}

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

8 个回复

倒序浏览
我这个使用字符流做的,拷贝文件后,其中的汉字无法显示(但是用字节流来写的话就好着呢),就几个黑点,是什么情况,操作汉字也属于操作字符的吧?那为什么会这样,求解释。。。

出现这样的问题主要是编码不统一,
使用字节流进行操作的时候,字节流是根据平台的编码进行解析的。
而使用字符流,则底层是采用的gb2312的编码格式。如果你的平台是UTF-8或者是其他的编码。就会出现你所说的这种乱码现象。

希望对你有所帮助,乱码问题是开发中最头疼的问题,不过只要编码统一就不会出现乱码。编码的时候仔细一点哦。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
2012 发表于 2013-9-12 15:40
我这个使用字符流做的,拷贝文件后,其中的汉字无法显示(但是用字节流来写的话就好着呢),就几个黑点,是 ...

那么现在我就使用字符流来做这个,要怎么写代码,才能让汉字正常显示呢
回复 使用道具 举报
可能是你字符集的问题
回复 使用道具 举报
本帖最后由 残梦共飞雪 于 2013-9-12 17:16 编辑

不知道是什么样子的方块。
如果是很多菱形的,多半是GBK被转成UTF-8了。
如果很多不存在的汉字,并且很多金字旁,那么就是UTF-8被转成GBK。

这是在一个版本混乱的项目里发现的血一样的经验。

补充:notepad++、UEStudio之类的编程文本程序都可以改变编码格式。
eclipse的话右键文件,选最下方的属性,弹出窗口最下方选择编码格式。

new InputStreamReader(conn.getInputStream(),charset)

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
  1. public static void main(String[] args)  {
  2.                 BufferedReader br = null;
  3.                 BufferedWriter bw = null;
  4.                 try {
  5.                         br = new BufferedReader(new FileReader(
  6.                                         "C:\\Documents and Settings\\user\\桌面\\11\\当前文件.txt"));
  7.                         bw = new BufferedWriter(new FileWriter("C:\\Documents and Settings\\user\\桌面\\11\\dest.txt"));
  8.                 } catch (IOException e) {
  9.                        
  10.                         e.printStackTrace();
  11.                 }
  12.                
  13.                 String line = null;
  14.                 try {
  15.                         while ((line = br.readLine()) != null) {
  16.                                 bw.write(line);
  17.                                 bw.newLine();
  18.                                 bw.flush();
  19.                         }
  20.                 } catch (IOException e1) {
  21.                         e1.printStackTrace();
  22.                 }

  23.                 try {
  24.                         if(bw!=null) {
  25.                         bw.close();
  26.                         }
  27.                 } catch (IOException e) {
  28.                         e.printStackTrace();
  29.                 }
  30.                 try {
  31.                         if(br!=null) {
  32.                         br.close();
  33.                         }
  34.                 } catch (IOException e) {
  35.                         e.printStackTrace();
  36.                 }
  37.         }
复制代码
回复 使用道具 举报
Zinmm 中级黑马 2013-9-13 04:49:56
7#
这是乱码,把编码格式改成UTF-8,以后开发记得要编码统一,作为程序员对于乱码表示很头疼的
回复 使用道具 举报
白磊 中级黑马 2013-9-13 08:36:15
8#
残梦共飞雪 发表于 2013-9-12 17:12
不知道是什么样子的方块。
如果是很多菱形的,多半是GBK被转成UTF-8了。
如果很多不存在的汉字,并且很多金 ...

上面的拷贝之后就成了下面这样了

$]Y}[`{%I%WD8`75Q]8~B97.jpg (62.86 KB, 下载次数: 12)

$]Y}[`{%I%WD8`75Q]8~B97.jpg
回复 使用道具 举报
白磊 发表于 2013-9-13 08:36
上面的拷贝之后就成了下面这样了

用软件修改一下编码格式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马