`
zh52722
  • 浏览: 6836 次
社区版块
存档分类
最新评论

获取文件编码

    博客分类:
  • Java
阅读更多

         最近在弄文件流的问题,文件上传,文件下载。不管上传还是下载都会用到流来处理,但在处理过程中,多多少少会遇到乱码的问题,这里提供如何获取文件编码的方法(网上转载的,源地址忘了,这里对原作者说声不好意思),知道文件编码以后,对文件的处理就方便了。上代码

         

/**
	 * 获取文件编码
	 * @param sourceFile
	 * @return
	 */
	@SuppressWarnings({ "resource", "unused" })
	private static String getFilecharset(File sourceFile) {
		String charset = "GBK";
		byte[] first3Bytes = new byte[3];
		try {
			boolean checked = false;
			BufferedInputStream bis = new BufferedInputStream(
					new FileInputStream(sourceFile));
			bis.mark(0);
			int read = bis.read(first3Bytes, 0, 3);
			if (read == -1) {
				return charset; // 文件编码为 ANSI
			} else if (first3Bytes[0] == (byte) 0xFF
					&& first3Bytes[1] == (byte) 0xFE) {
				charset = "UTF-16LE"; // 文件编码为 Unicode
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xFE
					&& first3Bytes[1] == (byte) 0xFF) {
				charset = "UTF-16BE"; // 文件编码为 Unicode big endian
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xEF
					&& first3Bytes[1] == (byte) 0xBB
					&& first3Bytes[2] == (byte) 0xBF) {
				charset = "UTF-8"; // 文件编码为 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) // 单独出现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;
					}
				}
			}
			bis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return charset;
	}

 

           还有,在这里,一定要注意,用流处理文件时,结束后一定要关闭流,不然会有问题

分享到:
评论

相关推荐

    JAVA获取文件编码格式

    标题提到的“JAVA获取文件编码格式”是一项常见的任务,特别是在处理来自不同来源的文本文件时。在这种情况下,我们可以利用第三方开源库来帮助我们完成这项工作。描述中提到了一个叫做"cpdetector"的工具,这是一个...

    Java字符编码及获取文件编码

    在实际应用中,我们可以使用以下步骤来尝试获取文件编码: 1. 检查文件头是否有BOM(UTF-8, UTF-16, UTF-32)。 2. 使用`CharsetDetector`类(如ICU4J中的)进行检测,该类会基于文件内容的统计特性来推测编码。 3....

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

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

    java 获取文件编码

    在Java编程语言中,获取文件编码是一个常见的任务,特别是在处理文本文件时,了解正确的编码格式至关重要,因为不同的编码方式会影响字符的表示和解析。本文将深入探讨如何在Java中识别和处理不同类型的文本编码,如...

    获取文件编码格式与文件转码

    下面将详细探讨如何获取文件编码格式以及如何进行文件转码。 1. **文件编码格式的获取** - **通过文件头部标识判断**:很多编码格式会在文件开头包含特定的字节序,如UTF-8的BOM(Byte Order Mark)或GBK的两个...

    C#获取文件编码(可以获取子目录下的文件)

    本文将深入探讨如何使用C#来获取文件的编码,以及在实际项目中遇到的挑战和解决方案。 首先,我们需要理解什么是文件编码。文件编码是指存储和表示文本字符的方式,常见的如ASCII、UTF-8、UTF-16和GBK等。不同的...

    java获取文件编码(判断有无BOM)

    本文将详细介绍如何在Java中获取文件的编码并判断文件是否带有BOM。 首先,让我们了解一下什么是BOM。BOM是UTF-8、UTF-16和UTF-32等编码格式中的一个可选标记,用于告知解析器文件的编码类型。例如,UTF-8的BOM是三...

    java获取文件编码

    java获取文件原始编码,

    java获取文件编码格式

    通过webview打开html文件有可能编码不同就会乱码,所以要获取html文件的编码格式动态改变webview编码设置

    获取文件编码格式

    识别文本文件的编码格式。 有时我们在处理文本文件时,对其编码要求有一定...但是,这并不代表它的文件编码就是 "UTF-8"。 利用这个,就可以有效识别以下几种编码格式: Unicode、Unicode big endian、utf-8、US-ASCII

    获取文件编码方式的两种方式(1.cpdetector第三方jar包,包含源码elipse项目;2.EncodingDetect.java工具类)

    本篇文章将详细介绍两种常用的方法来检测Java程序中的文件编码:一是使用`cpdetector`第三方库,二是通过自定义的`EncodingDetect.java`工具类。 1. **cpdetector第三方库** `cpdetector`是一个开源的Java库,它...

    uchardet OC文件获取文件编码.a文件

    【uchardet OC文件获取文件编码.a文件】 在IT领域,文件编码的识别是处理文本数据时不可或缺的一环。uchardet是一个开源的字符集检测库,它能够自动识别不同文件的编码方式,帮助开发者解决跨语言和跨平台的文本...

    安卓SD卡文件管理更新信息相关-获取文件编码格式与文件转码.rar

    获取文件编码格式与文件转码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    详解Java如何获取文件编码格式

    在Java编程中,获取文件编码格式是一个常见的需求,特别是在处理跨平台或来自不同来源的文本文件时。本文将深入探讨如何使用Java来识别文件的编码类型,主要关注两种方法:一种是简单的UTF-8与GBK的区分,另一种是...

    如何使用Java代码获取文件、文件流或字符串的编码方式.zip

    本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891

    C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)

    以下是获取文件编码的一个类: using System; using System.IO; using System.Text; /// /// FileEncoding 的摘要说明 /// namespace FileEncoding { /// /// 获取文件的编码格式 /// public class Encoding...

    读取创建CSV文件并自动解析文件编码方式

    本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...

    获取编码格式的工具类

    1. **检测文件编码**:这个方法通过分析文件的字节序列来判断其可能的编码。常见的检测策略有BOM(Byte Order Mark)检查,对于UTF-16、UTF-8带有BOM的编码,可以通过首几个字节快速确定;对于无BOM的编码,可以使用...

    解析URL和文件的编码方式

    文件编码则涉及到文件内容的存储方式。常见的文本文件编码有ASCII、UTF-8、GBK等。ASCII是最基础的编码,只包含128个英文字符;而UTF-8是一种广泛使用的多字节编码,支持全球大部分语言;GBK是中国大陆常用的扩展...

Global site tag (gtag.js) - Google Analytics