最近在弄文件流的问题,文件上传,文件下载。不管上传还是下载都会用到流来处理,但在处理过程中,多多少少会遇到乱码的问题,这里提供如何获取文件编码的方法(网上转载的,源地址忘了,这里对原作者说声不好意思),知道文件编码以后,对文件的处理就方便了。上代码
/** * 获取文件编码 * @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获取文件编码格式”是一项常见的任务,特别是在处理来自不同来源的文本文件时。在这种情况下,我们可以利用第三方开源库来帮助我们完成这项工作。描述中提到了一个叫做"cpdetector"的工具,这是一个...
在实际应用中,我们可以使用以下步骤来尝试获取文件编码: 1. 检查文件头是否有BOM(UTF-8, UTF-16, UTF-32)。 2. 使用`CharsetDetector`类(如ICU4J中的)进行检测,该类会基于文件内容的统计特性来推测编码。 3....
java 识别文件的编码格式 读取文件的编码 utf-8 gbk gb2312 java 编码 java 获取文件编码格式 java 乱码查找
在Java编程语言中,获取文件编码是一个常见的任务,特别是在处理文本文件时,了解正确的编码格式至关重要,因为不同的编码方式会影响字符的表示和解析。本文将深入探讨如何在Java中识别和处理不同类型的文本编码,如...
下面将详细探讨如何获取文件编码格式以及如何进行文件转码。 1. **文件编码格式的获取** - **通过文件头部标识判断**:很多编码格式会在文件开头包含特定的字节序,如UTF-8的BOM(Byte Order Mark)或GBK的两个...
本文将深入探讨如何使用C#来获取文件的编码,以及在实际项目中遇到的挑战和解决方案。 首先,我们需要理解什么是文件编码。文件编码是指存储和表示文本字符的方式,常见的如ASCII、UTF-8、UTF-16和GBK等。不同的...
本文将详细介绍如何在Java中获取文件的编码并判断文件是否带有BOM。 首先,让我们了解一下什么是BOM。BOM是UTF-8、UTF-16和UTF-32等编码格式中的一个可选标记,用于告知解析器文件的编码类型。例如,UTF-8的BOM是三...
java获取文件原始编码,
通过webview打开html文件有可能编码不同就会乱码,所以要获取html文件的编码格式动态改变webview编码设置
识别文本文件的编码格式。 有时我们在处理文本文件时,对其编码要求有一定...但是,这并不代表它的文件编码就是 "UTF-8"。 利用这个,就可以有效识别以下几种编码格式: Unicode、Unicode big endian、utf-8、US-ASCII
本篇文章将详细介绍两种常用的方法来检测Java程序中的文件编码:一是使用`cpdetector`第三方库,二是通过自定义的`EncodingDetect.java`工具类。 1. **cpdetector第三方库** `cpdetector`是一个开源的Java库,它...
【uchardet OC文件获取文件编码.a文件】 在IT领域,文件编码的识别是处理文本数据时不可或缺的一环。uchardet是一个开源的字符集检测库,它能够自动识别不同文件的编码方式,帮助开发者解决跨语言和跨平台的文本...
获取文件编码格式与文件转码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
在Java编程中,获取文件编码格式是一个常见的需求,特别是在处理跨平台或来自不同来源的文本文件时。本文将深入探讨如何使用Java来识别文件的编码类型,主要关注两种方法:一种是简单的UTF-8与GBK的区分,另一种是...
本工程用于研究如何使用Java代码获取文件、文件流或字符串的编码方式 本工程编码方式:UTF-8 开发工具:MyEclipse 参考博客:http://blog.csdn.net/gaohuanjie/article/details/43735891
以下是获取文件编码的一个类: using System; using System.IO; using System.Text; /// /// FileEncoding 的摘要说明 /// namespace FileEncoding { /// /// 获取文件的编码格式 /// public class Encoding...
本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...
1. **检测文件编码**:这个方法通过分析文件的字节序列来判断其可能的编码。常见的检测策略有BOM(Byte Order Mark)检查,对于UTF-16、UTF-8带有BOM的编码,可以通过首几个字节快速确定;对于无BOM的编码,可以使用...
文件编码则涉及到文件内容的存储方式。常见的文本文件编码有ASCII、UTF-8、GBK等。ASCII是最基础的编码,只包含128个英文字符;而UTF-8是一种广泛使用的多字节编码,支持全球大部分语言;GBK是中国大陆常用的扩展...