修改版的java导入编码问题(方法)
2014-09-02 15:42
246 查看
/** * 判断文件的编码格式 * * @param sourceFile * @return */ private static String getFilecharset(File sourceFile) { String charset = "UTF-8"; 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] == 49 && first3Bytes[1] == -60 && first3Bytes[2] == -29) { charset = "gb2312"; // 文件编码为 ANSI checked = true; } else if (first3Bytes[0] == 49 && first3Bytes[1] == -95 && first3Bytes[2] == -94) { charset = "gb2312"; // 文件编码为 ANSI checked = true; } else if (first3Bytes[0] == -51 && first3Bytes[1] == -8 && first3Bytes[2] == -62) { charset = "gb2312"; // 文件编码为 ANSI 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; }
相关文章推荐
- mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)
- java和jsp中文编码问题的解决方法(ISO8859_1、GBK、UTF-8)(精品)
- eclipse导入java项目方法及出现问题
- qt creator修改程序编码(解决中文乱码问题)的方法
- Sybase BCP导入数据时碰到中文编码问题的解决方法
- 解决java乱码的问题的两种方式tomcat编码修改
- JAVA问题记录-利用Spring AOP来拦截特定方法上的注解并根据业务修改注解字段值
- java 中的编码问题和解决方法
- Sublime Text 3搭建Java开发环境及输出编码问题解决方法
- java和jsp中文编码问题的解决方法(ISO8859_1、GBK、UTF-8)
- java修改编码格式的N种场景和方法
- java.lang.OutOfMemoryError: PermGen space的问题及修改JVM的内存大小方法
- QT学习——qt creator修改程序编码(解决中文乱码问题)的方法
- qt creator修改程序编码(解决中文乱码问题)的方法
- 深入Java中文编码乱码问题及最优解决方法
- qt creator修改程序编码(解决中文乱码问题)的方法
- 【Javaweb】修改Eclipse for JavaEE中新建Jsp的默认编码,避免每次新建都要改编码的问题
- Android 项目编码修改,在导入一个项目后,出现乱码问题
- 前台使用js的encodeURIComponent编码后,java解析乱码问题的解决方法
- 深入Java中文编码乱码问题及最优解决方法