`
henry2009
  • 浏览: 93470 次
  • 性别: 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`的方法,该方法接收一个...

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

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

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

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

    Java判断文件的编码

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

    javascript 判断是否GBK编码

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

    2.java字符集.zip

    9. 字符集的设置 在JVM启动时,可以通过`-Dfile.encoding`参数来设置系统的默认字符集。这个设置会影响Java程序在处理文件和I/O时的默认编码。 10. 字符集与多语言支持 Java的字符集机制使得开发支持多种语言的应用...

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

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

    Java编写的非常有用的方法,文字中提取中文字符

    中文字符属于Unicode字符集,其范围通常是`\u4e00`到`\u9fff`,包含了大部分简体和繁体汉字。以下是一个简单的示例方法,用于从字符串中提取所有的汉字: ```java public static String extractChineseChars(String...

    字符串统计函数,统计不同字符个数和每个字符出现的次数

    这个简单的统计函数可以扩展以满足更复杂的需求,例如统计特定字符集内的字符,或者计算字母频率分布等。同时,也可以考虑使用其他数据结构,如`std::map`或自定义的数据结构,根据实际需求选择合适的方法。通过理解...

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

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

    java判断编码方式

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

    识别中文字符

    7. 字符编码和字符集:程序暗示了中文字符在计算机内部表示时使用的编码方式。由于中文字符通常用两个字节表示,这通常意味着使用了如GB2312、GBK或UTF-8这样的编码标准。由于程序中没有明确说明所使用的字符编码,...

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

    - **Unicode**:为了解决多语言字符集的问题,Unicode是一个统一的字符集,包括了世界上几乎所有的字符,有UTF-8、UTF-16等多种实现方式。 - **UTF-8**:最常用的Unicode编码,每个字符根据其值使用1至4个字节,...

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

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

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

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

    xor校验和字符转换工具集

    在IT领域,校验和是一种常见的数据完整性检查方法,用于检测数据在传输或存储过程中是否发生错误。XOR(异或)校验是其中一种简单而有效的算法。本压缩包"XOR校验和字符转换工具集"包含了与XOR校验相关的编程小工具...

    java获取字符串编码类型代码(导入直接查看结果)

    编码类型决定了字符集,它定义了如何将字符转换为数字(字节)以及如何将数字转换回字符。常见的编码类型有ASCII、ISO-8859-1、UTF-8、GBK等。在某些场景下,我们需要确定字符串的具体编码类型,比如读取未知编码...

    Python字符编码检测库PyCharlockHolmes.zip

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

Global site tag (gtag.js) - Google Analytics