`
henry2009
  • 浏览: 93819 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

判断文件字符集的简单方法

    博客分类:
  • java
阅读更多
/**
	 * 
	 *	  ANSI:        无格式定义;
	 *	  Unicode:       前两个字节为FFFE
	 *	  Unicode big endian: 前两字节为FEFF  
	 *	  UTF-8:        前两字节为EFBB
	 * @param file
	 * @return
	 */
	public static String get_charset(File file) {
		String charset = "GBK";
		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 len = 0;
				int loc = 0;

				while ((read = bis.read()) != -1) {
					loc++;
					if (read >= 0xF0)
						break;
					if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBK
						break;
					if (0xC0 <= read && read <= 0xDF) {
						read = bis.read();
						if (0x80 <= read && read <= 0xBF) // 双字节 (0xC0 - 0xDF)
															// (0x80
							// - 0xBF),也可能在GB编码内
							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;
					}
				}
				// System.out.println( loc + " " + Integer.toHexString( read )
				// );
			}

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

		return charset;
	}

 转至:http://ajava.org/code/I18N/14816.html

分享到:
评论

相关推荐

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

    总的来说,Java中判断文件编码格式的方法包括简单的字节匹配和使用更复杂的库如cpdetector。在实际开发中,应根据项目的具体需求选择合适的方法,确保能正确处理各种编码格式的文件,避免因为编码问题导致的乱码现象...

    java读取文件字符集示例方法

    本文将详细介绍如何使用Java来识别和处理文件的字符集,主要关注如何通过代码示例判断文件是采用UTF-8、GBK还是其他字符集。 首先,我们可以看到提供的代码片段中定义了一个名为`getCharset`的方法,该方法接收一个...

    Java判断文件的编码

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

    易语言判断字符类型源码.rar

    - **编码问题**:不同的字符集(如ASCII、GB2312、UTF-8等)对字符的表示方式不同,处理时需注意字符编码的转换。 - **错误处理**:在处理字符时可能会遇到非法字符或编码错误,需要编写适当的错误处理代码来避免...

    2.java字符集.zip

    Java的字符集机制使得开发支持多种语言的应用变得简单。开发者只需要关注逻辑,而无需担心底层的字符编码问题,这大大提升了Java作为全球化开发平台的能力。 总的来说,Java字符集是其强大的跨平台特性和国际化支持...

    C#判断字符编码的方法总结(六种方法)

    这个方法检查字符是否超过ASCII基本拉丁文字符集(小于128)。如果字符串中的任何字符的ASCII值大于128,就认为包含非ASCII字符,可能是中文字符。 3. **方法三:GBK编码长度判断** 由于GBK编码中,中文字符由两...

    javascript 判断是否GBK编码

    在JavaScript中,判断一个字符串是否属于GBK编码是一个常见的需求,特别是在处理中文字符集时。GBK是GB2312的扩展,包含了更多的汉字和其他字符,是Windows系统中广泛使用的中文编码标准。本篇将深入探讨如何通过...

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

    但对于非ASCII字符集,如GBK或UTF-8,文件的开头可能会包含特定的字节序列来标识编码。例如,UTF-8编码的文件,如果以BOM(Byte Order Mark)开始,那么前三个字节的值会是-17(0xEF)、-69(0xBB)和-65(0xBF)。...

    java判断编码方式

    在Java编程语言中,判断文件或...需要注意的是,这些方法都有其局限性,特别是对于没有BOM且包含混合字符集的文件,可能会比较困难。因此,最好的实践是在创建文件或数据时就明确记录编码类型,以避免后期的识别问题。

    Unicode--宽字节字符集[文].pdf

    Unicode字符集是一种编码标准,旨在统一全球各种语言的文字表示,以解决不同地区和语言之间的文本数据交换问题。在软件开发中,尤其是涉及到多语言支持时,Unicode是至关重要的。宽字节字符集(如DBCS,Double Byte ...

    C# 编码自动识别 匹配文件当前编码格式

    编码是计算机用于表示和存储字符集的方式,常见的有ASCII、GB2312、GBK、HZ、UTF-8等。GB2312是中国早期的简体中文编码标准,GBK是其扩展,包含了更多的汉字和其他字符;HZ编码主要用于电子邮件,而UTF-8是目前最...

    易语言取文件大小

    易语言是一种中文编程环境,它提供了简单直观的语法来实现各种操作,包括获取文件的大小。在这个场景下,“易语言取文件大小”指的是使用易语言编写代码来获取指定文件的字节数或者尺寸。下面将详细探讨如何在易语言...

    判断文本文件编码的C#源码

    本文将深入探讨如何利用C#编程语言来判断文本文件的编码,并重点介绍使用NChardet库进行自动检测的方法。 NChardet是一个基于libchardet的C#实现,libchardet最初是Mozilla项目的一部分,用于识别网络传输的非ASCII...

    Android读写配置文件

    首先,Android提供了SharedPreferences接口,它是用于存储轻量级数据的首选方式,例如布尔值、整数、浮点数、字符串和字符串集。它将数据保存在XML文件中,通常位于应用的私有目录下。下面是如何使用...

    检测文件中字符的合法性(C++)

    这可能涉及到ASCII码的范围,特殊字符的排除,或者根据特定的字符集(如ASCII、UTF-8等)。一个简单的示例是检查文件中的每个字符是否都在ASCII基本字符集中: ```cpp char c; while (file.get(c)) { if (c || c &gt;...

    一款在线文本批量替换工具,能自动识别文件编码类型,在线批量替换文本文件中的字符的asp原创程序.

    文件编码对于文本处理至关重要,不同编码方式包含的字符集和存储规则都不同,如ASCII编码只能表示128个基本字符,而UTF-8编码能表示从128个扩展到数百万个不同字符的Unicode字符集。如果工具不能正确识别文件编码,...

    Python字符编码检测库PyCharlockHolmes.zip

    PyCharlockHolmes集成libmagic,增强了对文件类型的判断能力,尤其是对于二进制文件中的文本部分,能有效地识别其内部的字符编码。 **PyCharlockHolmes的使用** 使用PyCharlockHolmes库非常简单,只需几行代码就...

    hasemoji检查一个字符串是否有任何表情符号emoji

    在JavaScript中,由于Unicode字符集的复杂性,直接判断一个字符串是否包含emoji并非易事。"has-emoji"库解决了这个问题,使得开发者能够轻松地在代码中集成这种功能。 "has-emoji"库是由Sindre Sorhus创建的,他是...

    python读取dbf文件时出现UnicodeDecodeError,目前解决方法(2021)(csdn)————程序.pdf

    `codepage`用于指定文件的字符集,如CP936代表简体中文GBK编码。在Python3中,将`codepage`设置为相应的值(如936)可以解决编码问题。 代码示例: ```python import dbf # 使用正确的codepage读取DBF文件 table1...

Global site tag (gtag.js) - Google Analytics