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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨震 于 2012-9-11 10:03 编辑

import java.io.*;

public class FileWriterDemo {
        public static void main(String[] args) throws IOException {
                //使用FileRead的read方法读入并输出每次读的数据十六进制表示
                Reader p1 = new InputStreamReader(new FileInputStream("文档.txt"), "UTF-8");
                int p11 = 0;
                while ((p11 = p1.read()) != -1) {
                        System.out.println((char)p11);
                }
                p1.close();
      }
}
我去一个UTF-8编码的文本,开头总是有个乱码,不知道怎么回事


7 个回复

正序浏览
杨震 发表于 2012-9-11 11:48
我就是想知道为什么会这样?按正常读取为什么会多一个?,而非要用非正常手段 ...

你只要知道读取utf-8格式的文档内容是个例外就可以了,要问为什么,那就要去熟悉utf-8编码的知识.
回复 使用道具 举报
我就是想知道为什么会这样?按正常读取为什么会多一个?,而非要用非正常手段
回复 使用道具 举报
杨震 发表于 2012-9-11 11:29
我文档里面保存的是UTF-8,就是开头是乱的

比如说文件里是:严严严

读取utf-8的格式的文件内容,首位会多一个?,其实你只要在读取之前先读一个字符就可以了:

  1. import java.io.FileInputStream;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.Reader;
  6. import java.io.UnsupportedEncodingException;

  7. public class FileWriterDemo {

  8.         public static void main(String[] args) {
  9.                 // 使用FileRead的read方法读入并输出每次读的数据十六进制表示
  10.                 Reader p1 = null;
  11.                 try {
  12.                         p1 = new InputStreamReader(new FileInputStream("D:/文档.txt"),
  13.                                         "utf-8");
  14.                         int p11 = 0;
  15.                         char[] cs = new char[2];

  16.                         // 这是先读一个字符
  17.                         p1.read();

  18.                         while ((p11 = p1.read(cs)) != -1) {
  19.                                 String str = new String(cs, 0, p11);
  20.                                 System.out.print(str);
  21.                         }
  22.                 } catch (UnsupportedEncodingException e) {
  23.                         e.printStackTrace();
  24.                 } catch (FileNotFoundException e) {
  25.                         e.printStackTrace();
  26.                 } catch (IOException e) {
  27.                         e.printStackTrace();
  28.                 } finally {
  29.                         try {
  30.                                 p1.close();
  31.                         } catch (IOException e) {
  32.                                 e.printStackTrace();
  33.                         }
  34.                 }
  35.         }

  36. }
复制代码
回复 使用道具 举报
马镱洵 发表于 2012-9-11 11:23
你的文档.txt的保存的编码形式一定不是utf-8的,所以出现汉字就会乱码.

我文档里面保存的是UTF-8,就是开头是乱的

比如说文件里是:严严严
输出来是:?严严严

你试试看
回复 使用道具 举报
你的文档.txt的保存的编码形式一定不是utf-8的,所以出现汉字就会乱码.
回复 使用道具 举报
包含有汉字,用GBK可以,为什么用UTF-8就不行了,我这里Reader p1 = new InputStreamReader(new FileInputStream("文档.txt"), "UTF-8");
是用UTF-8来读的啊,为什么开始一个总是问号,就是多一个问号在前面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马