获取文件编码
来源:互联网 发布:2016年天猫双十一数据 编辑:程序博客网 时间:2024/06/02 04:41
此文章是从我自己iteye博客弄过来的
不管上传还是下载都会用到流来处理,但在处理过程中,多多少少会遇到乱码的问题,这里提供如何获取文件编码的方法(网上转载的,源地址忘了,这里对原作者说声不好意思,在这里记录下来,方便查阅),知道文件编码以后,对文件的处理就方便了。上代码
/** * 获取文件编码 * @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; }
还有,在这里,一定要注意,用流处理文件时,结束后一定要关闭流,不然会有问题
0 0
- 获取文件编码
- 获取文件的编码
- JAVA获取文件编码
- 获取文件编码
- java获取文件编码
- delphi获取文件编码
- 获取文件编码chardet
- 获取文件编码
- java获取文件编码
- 简单自动获取文件编码
- 获取文件的编码格式
- 获取远程文件编码问题
- 获取文件的编码格式
- java获取文件编码实现
- Java 获取文件默认编码
- 获取文件采用什么编码
- java 获取文件编码格式
- JAVA上传文件获取文件编码格式
- python 使用Pool,并需要关注结果
- vector的迭代器失效
- eclipse启动tomcat访问不到主页
- 曲线拐点快速寻找算法+C代码
- OC中特有的一些语法
- 获取文件编码
- BUI+Spring+Mybatis
- android之针对fragment多次调用onCreateView的问题
- hdu杭电2199 Can you solve this equation?【二分】
- android开发中获取系统时间方法
- 杭电2141Can you find it?
- Swift开发教程--字符串的操作
- 详解Spring MVC 4常用的那些注解
- Drupal 菜单系统 hook_menu