黑马程序员技术交流社区

标题: javaIO流读取UTF-8的文本为什么开头有个乱码 [打印本页]

作者: 杨震    时间: 2012-9-11 09:59
标题: javaIO流读取UTF-8的文本为什么开头有个乱码
本帖最后由 杨震 于 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编码的文本,开头总是有个乱码,不知道怎么回事



作者: 杨震    时间: 2012-9-11 10:35
包含有汉字,用GBK可以,为什么用UTF-8就不行了,我这里Reader p1 = new InputStreamReader(new FileInputStream("文档.txt"), "UTF-8");
是用UTF-8来读的啊,为什么开始一个总是问号,就是多一个问号在前面
作者: AngieFans85    时间: 2012-9-11 11:23
你的文档.txt的保存的编码形式一定不是utf-8的,所以出现汉字就会乱码.
作者: 杨震    时间: 2012-9-11 11:29
马镱洵 发表于 2012-9-11 11:23
你的文档.txt的保存的编码形式一定不是utf-8的,所以出现汉字就会乱码.

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

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

你试试看
作者: AngieFans85    时间: 2012-9-11 11:46
杨震 发表于 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:48
我就是想知道为什么会这样?按正常读取为什么会多一个?,而非要用非正常手段
作者: AngieFans85    时间: 2012-9-11 12:35
杨震 发表于 2012-9-11 11:48
我就是想知道为什么会这样?按正常读取为什么会多一个?,而非要用非正常手段 ...

你只要知道读取utf-8格式的文档内容是个例外就可以了,要问为什么,那就要去熟悉utf-8编码的知识.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2