`
tohsj0806
  • 浏览: 21598 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

判断编码问题

阅读更多
自己写了一个(第一个),然后客户提供了一个,均分享。
public String GetCharset(File file) {
		String charset = "SJIS";
		byte[] first3Bytes = new byte[3];
		try {
			boolean checked = false;
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream(file));
			bis.mark(0);
			int read = bis.read(first3Bytes, 0, 3);
			if (read == -1)
				return charset;
			if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
				charset = "UTF-16LE";
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xFE
					&& first3Bytes[1] == (byte) 0xFF) {
				charset = "UTF-16BE";
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xEF
					&& first3Bytes[1] == (byte) 0xBB
					&& first3Bytes[2] == (byte) 0xBF) {
				charset = "UTF-8";
				checked = true;
			}
			bis.reset();
			if (!checked) {
				int loc = 0;
				while ((read = bis.read()) != -1) {
					loc++;
					if (read >= 0xF0)
						break;
					if (0x80 <= read && read <= 0xBF) 
						break;
					if (0xC0 <= read && read <= 0xDF) {
						read = bis.read();
						if (0x80 <= read && read <= 0xBF) 
							continue;
						else
							break;
					} else if (0xE0 <= read && read <= 0xEF) {
						read = bis.read();
						if (0x80 <= read && read <= 0xBF) {
							read = bis.read();
							if (0x80 <= read && read <= 0xBF) {
								charset = "UTF-8";
								break;
							} else
								break;
						} else
							break;
					}
				}
			}

			bis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return charset;
	}



第二个:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.mozilla.universalchardet.UniversalDetector;

public class EncodingTest {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String sourceFilename = "source.txt";
        FileInputStream fis= null;
        try {
            fis =   new FileInputStream(sourceFilename);
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
            return;
        }

        UniversalDetector detector = new UniversalDetector(null);
        try {
            while (true) {
                byte[] bytes = new byte[1024];
                int nread;
                nread = fis.read(bytes);
                if(nread <= 0){
                    break;
                }
                
                detector.handleData(bytes, 0, nread);
                
                if(detector.isDone() == true){
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        detector.dataEnd();
        
        if(fis != null){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
        }

        String encoding = detector.getDetectedCharset();
        System.out.println("Encoding = " + encoding);
    }

}

分享到:
评论

相关推荐

    C#简单判断字符编码的方法

    本文实例讲述了C#简单判断字符编码的方法。分享给大家供大家参考,具体如下: public static string GetText(byte[] buff) { string strReslut = string.Empty; if (buff.Length &gt; 3) { if (buff[0] == 239 && ...

    java判断编码方式

    这种方法可能会产生乱码,但可以通过捕获`CharacterCodingException`来识别错误的编码。 ```java for (String encoding : possibleEncodings) { try (BufferedReader reader = new BufferedReader(new ...

    判断字符编码格式代码

    根据给定文件的信息,我们可以总结出以下关于“判断字符编码格式代码”的相关知识点: ### 一、背景介绍 在计算机科学领域,字符编码是将文本转换为数字表示的方法,以便于计算机存储和处理。常见的字符编码包括...

    解决android读取中文乱码 自动判断文档类型并转码

    Android 读取中文 txt 文件时经常会出现乱码问题,主要是因为文档的编码格式不确定,从而导致读取时出现乱码。为了解决这个问题,我们可以通过自动判断文档类型并转码来解决乱码问题。 在 Java 中,我们可以使用 ...

    彻底解决android读取中文txt的乱码(自动判断文档类型并转码

    通过以上步骤,我们可以实现一个相对完整的读取中文TXT文件的解决方案,即使文件编码未知,也能自动判断并转换,避免乱码问题。在实际开发中,建议结合具体需求选择合适的方法,确保代码的稳定性和效率。 当然,...

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

    在实际开发中,应根据项目的具体需求选择合适的方法,确保能正确处理各种编码格式的文件,避免因为编码问题导致的乱码现象。同时,使用开源库可以提高代码的健壮性和兼容性,减少手动编码的复杂性。

    javascript 判断是否GBK编码

    在JavaScript中,判断一个字符串是否属于GBK编码是一个常见的需求,特别是在处理中文字符集时。...总的来说,理解和判断GBK编码在JavaScript中的应用是处理中文字符集问题的重要一环,尤其在网络传输和多语言环境下。

    Java判断文件的编码

    ### Java判断文件编码的方法 在Java开发中,经常会遇到需要处理不同编码格式的文件的情况。为了确保程序能够正确解析文件内容,必须先判断文件的编码格式。本文将详细介绍如何使用Java来判断文件是否为UTF-8或GBK...

    java判断文件编码

    总之,Java提供了一些库和工具来帮助开发者识别文件的编码,通过引入`cpdetector`和`chardet`库,结合`FileCharsetDetector.java`中的方法,可以有效地解决文件编码的判断问题。理解这些工具的工作原理,以及如何在...

    判断字符串编码是utf-8还是gb23121

    在实际应用中,判断字符串编码可以应用在各种场景,比如从数据库中读取数据后自动判断编码、处理网络传输数据、处理用户输入数据等等。正确处理编码不仅能够提高程序的稳定性,还能够保证用户体验的连贯性和数据的...

    c#自动判断URL编码方法

    自动判断URL编码的方法。URL中包含编码的中文的时候,程序获取queryString需要根据url的不同编码,采用不同的解码方式,RequestQueryString方法能够自动识别url是用UTF-8编码还是GB2312编码,从而自动获取争取的值。...

    判断文本文件是否为UTF-8编码

    了解并掌握文本文件的编码识别,对于进行跨平台的文本处理、国际化和本地化工作尤其重要,可以避免出现乱码问题,保证数据的准确性和一致性。在实际开发中,我们应该养成良好的编码习惯,尽量使用标准的UTF-8编码,...

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

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

    jsoncpp 写入乱码解决版本

    在C++编程中,乱码问题通常涉及到字符编码,如ASCII、UTF-8、GBK等。JSON数据通常以UTF-8编码存储,因为它能表示Unicode字符集中的所有字符,是网络通信的标准编码。然而,如果你的程序在处理JSON数据时,没有正确地...

    Ajax中文乱码问题解决方案

    然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致或者处理不当导致的。本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**...

    java文件字符编码集判断依赖.zip

    通用的文件字符编码集判断需要借助第三方包cpdetector.jar 使用Cpdetector jar包检测文件编码需要依赖antlr-2.7.7.jar、chardet-1.0.jar、jargs-1.0.jar三个jar包 本下载资源一站式全包含,并附带亲测有效的片段...

    java判断文件编码或文本流编码的方法宣贯.pdf

    在Java编程中,判断文件或文本流的编码是处理文本数据时的重要步骤,尤其是在处理包含多种语言或特殊字符的文件时。以下将详细介绍如何在Java中进行文件编码的判断。 首先,基本的判断方法是通过读取文件的前三个...

    S22.Imap解决中文乱码问题

    总的来说,理解和处理中文乱码问题需要对字符编码有深入的理解,以及对S22.Imap库的熟悉。通过适当地修改源码,开发者能够克服这个障碍,使得S22.Imap能够更准确地处理含有中文字符的邮件,从而提升用户体验。

    java程序判断文件编码的类型

    ### Java程序判断文件编码的类型 #### 知识点概览 ...正确识别文件编码对于避免乱码问题非常重要。通过以上方法,我们可以有效地判断文件的编码类型,并据此进行相应的编码转换操作,以确保文本数据的正确处理。

    部署到linux服务器文件名乱码问题

    在项目部署过程中,如果出现乱码问题,首先需要判断是否为编码问题导致。在本次案例中,系统在升级过程中提示升级失败,并初步判断为编码问题。为了验证这一猜想,可以使用Winscp等工具连接到目标服务器,查看指定...

Global site tag (gtag.js) - Google Analytics