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

/**
	 * 
	 *	  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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用C语言中的文件操作和字符操作函数来实现统计一个文本文件中字母字符、数字字符及其他字符的个数。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <ctype.h> int main() { FILE *fp; int ch; int letter_count = 0, digit_count = 0, other_count = 0; // 打开文件 fp = fopen("example.txt", "r"); if(fp == NULL) { printf("文件打开失败!\n"); return 1; } // 读取文件内容并统计字符个数 while((ch = fgetc(fp)) != EOF) { if(isalpha(ch)) { letter_count++; } else if(isdigit(ch)) { digit_count++; } else { other_count++; } } // 关闭文件 fclose(fp); // 输出结果 printf("字母字符个数:%d\n", letter_count); printf("数字字符个数:%d\n", digit_count); printf("其他字符个数:%d\n", other_count); return 0; } ``` 在这个示例代码中,我们首先使用 `fopen()` 函数打开一个名为 "example.txt" 的文本文件,并检查文件是否打开成功。然后,我们使用 `fgetc()` 函数逐个读取文件中的字符,并使用 `isalpha()` 和 `isdigit()` 函数判断每个字符是否为字母字符或数字字符。如果是,则相应的计数器加一;否则,其他字符计数器加一。最后,我们使用 `fclose()` 函数关闭文件,并输出统计结果。 需要注意的是,这个示例代码只能统计 ASCII 字符集中的字母字符和数字字符,对于其他字符集可能需要做出相应的修改。同时,为了简化示例代码,我们没有对文件打开和关闭操作做出错误处理,实际应用中需要注意这些细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值