`
jianFengGong
  • 浏览: 20879 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 读取文件编码问题

    博客分类:
  • JAVA
 
阅读更多

在项目中遇到要读取文本文件内容然后批量查询,但每当在后台读取上传文件流时,第一个内容总会有一个?如:

?test0

test1

而实际内容应该是:

test0

test1.

经过查找资料,有了下面解决方式:

BufferedReader nickContent = new BufferedReader(new UnicodeReader(mFileItem.getInputStream(),Charset.defaultCharset().name()));

 

UnicodeReader.java
import java.io.*;
    /**
     * Generic unicode textreader, which will use BOM mark
     * to identify the encoding to be used. If BOM is not found
     * then use a given default or system encoding.
     */
    public class UnicodeReader extends Reader {
        PushbackInputStream internalIn;
        InputStreamReader   internalIn2 = null;
        String              defaultEnc;


        private static final int BOM_SIZE = 4;


        /**
         *
         * @param in  inputstream to be read
         * @param defaultEnc default encoding if stream does not have
         *                   BOM marker. Give NULL to use system-level default.
         */
        public UnicodeReader(InputStream in, String defaultEnc) {
            internalIn = new PushbackInputStream(in, BOM_SIZE);
            this.defaultEnc = defaultEnc;
        }


        public String getDefaultEncoding() {
            return defaultEnc;
        }


        /**
         * Get stream encoding or NULL if stream is uninitialized.
         * Call init() or read() method to initialize it.
         */
        public String getEncoding() {
            if (internalIn2 == null) return null;
            return internalIn2.getEncoding();
        }


        /**
         * Read-ahead four bytes and check for BOM marks. Extra bytes are
         * unread back to the stream, only BOM bytes are skipped.
         */
        protected void init() throws IOException {
            if (internalIn2 != null) return;


            String encoding;
            byte bom[] = new byte[BOM_SIZE];
            int n, unread;
            n = internalIn.read(bom, 0, bom.length);


            if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) &&
                    (bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) {
                encoding = "UTF-32BE";
                unread = n - 4;
            } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) &&
                    (bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) {
                encoding = "UTF-32LE";
                unread = n - 4;
            } else if (  (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) &&
                    (bom[2] == (byte)0xBF) ) {
                encoding = "UTF-8";
                unread = n - 3;
            } else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) {
                encoding = "UTF-16BE";
                unread = n - 2;
            } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) {
                encoding = "UTF-16LE";
                unread = n - 2;
            } else {
                // Unicode BOM mark not found, unread all bytes
                encoding = defaultEnc;
                unread = n;
            }
            //System.out.println("read=" + n + ", unread=" + unread);


            if (unread > 0) internalIn.unread(bom, (n - unread), unread);


            // Use given encoding
            if (encoding == null) {
                internalIn2 = new InputStreamReader(internalIn);
            } else {
                internalIn2 = new InputStreamReader(internalIn, encoding);
            }
        }


        public void close() throws IOException {
            init();
            internalIn2.close();
        }


        public int read(char[] cbuf, int off, int len) throws IOException {
            init();
            return internalIn2.read(cbuf, off, len);
        }
}

分享到:
评论

相关推荐

    java读写csv文件,中文乱码问题

    解决Java读取CSV文件中文乱码问题的步骤如下: 1. **指定字符编码**:在使用`BufferedReader`或者`FileReader`读取文件时,应明确指定编码。例如,使用`InputStreamReader`构造函数可以传入编码类型,如`new ...

    Java读取TXT文本文件乱码解决方案.doc

    "Java读取TXT文本文件乱码解决方案" Java 读取 TXT 文本文件乱码解决方案中,主要讨论的是在 Java 中读取 TXT 文本文件时出现乱码的问题,并提供了解决方案。 首先,文章中提供了一个简单的读取 TXT 文件的代码,...

    java读取txt文件乱码解决方案

    java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt...

    java读取文件中文乱码

    在Java编程中,读取包含中文字符的...通过理解和应用这些知识点,你可以有效地解决Java读取文件时出现的中文乱码问题。在实际开发中,对文件编码的理解和处理是至关重要的,能够确保程序正确地处理各种语言和字符集。

    java读取文件方法大全

    ### Java读取文件方法大全:读取File流等技术 在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...

    java读写文件避免中文乱码.docx

    如果不进行正确的编码转换,就可能会出现中文乱码问题。Java 提供了多种编码方式,例如 UTF-8、GBK、ISO-8859-1 等。在读取和写入文件时,需要选择合适的编码方式,以避免中文乱码。 在给定的代码中,使用了 UTF-8 ...

    java 读取文件乱码

    了解了这些基础知识后,我们就能有效地处理Java读取文件时可能出现的乱码问题。在编写代码时,始终注意文件编码的设定,尤其是在处理跨平台或多语言内容时,使用Unicode(如UTF-8)作为标准编码通常是个好选择。通过...

    java 读取文件 文件读取操作

    在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取...

    Java读写xml,word,xml文件(防乱码)

    不同的操作系统、软件可能使用不同的默认编码格式,这就会导致在跨平台或跨软件间读写文件时出现乱码问题。因此,在处理文件时,明确指定文件的编码格式是十分重要的。 #### 三、Java读取XML文件 对于XML文件的读取...

    java 解析csv文件例子,csv文件 中文乱码问题

    当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java....

    JAVA获取文件编码格式

    使用cpdetector,开发者可以避免因文件编码不明确而产生的乱码问题,确保程序能正确处理各种类型的文本文件。 在Java中,我们可以按照以下步骤使用cpdetector: 1. **引入依赖**:首先,需要将cpdetector的jar包...

    Java判断文件编码格式 - 明明是悟空 - 博客园1

    在Java编程中,判断文件编码格式是一项常见的任务,特别是在处理包含多国语言或者用户自定义内容的文件时。本文将探讨如何使用Java进行文件编码格式的识别,主要介绍两种方法:一种是简单的UTF-8判断,另一种是使用...

    彻底解决JAVA读取写入 TXT中文乱码问题 源码

    要解决Java读取TXT文件中文乱码的问题,关键在于指定正确的编码方式。以下是使用`BufferedReader`和`FileReader`读取UTF-8编码的TXT文件的示例: ```java import java.io.BufferedReader; import java.io....

    java读取文件免除乱码

    总结,解决Java读取文件时的乱码问题,关键在于明确文件的编码格式并正确地在代码中指定。通过使用不同的IO类库和工具,以及自定义的编码检测方法,我们可以有效地处理各种编码的文件,确保数据的正确性。

    java压缩zip文件解决中文乱码问题

    在Java中,`java.util.zip`包提供了对ZIP文件的基本操作,但默认使用的是平台默认的字符集,这可能在跨平台操作时引发乱码问题。 为了解决这个中文乱码问题,我们需要在创建ZipEntry时指定合适的字符集,通常是UTF-...

    获取文件编码格式(纯JAVA代码,绝对对你有用)

    java 识别文件的编码格式 读取文件的编码 utf-8 gbk gb2312 java 编码 java 获取文件编码格式 java 乱码查找

    excel xlsx文件读取 javadbf乱码解决

    该项目包含了项目所需要的jar包以及测试案例。项目使用环境为eclipse jdk1.8 1.poi.Testpoi为测试用例;...3.解决了javadbf读取dbf文件表头和数据乱码问题,com.webadmin.util.dbf.DBFReaderTest为测试用例。

    java读取配置文件

    在Java编程中,读取配置文件是常见的任务,特别是在开发需要灵活配置的系统时。配置文件通常用于存储应用程序的设置...确保正确处理异常,保证资源及时关闭,以及在读取配置文件时考虑到安全问题,避免硬编码敏感信息。

Global site tag (gtag.js) - Google Analytics