快门支持文件上传功能,能把用户上传的文件上传到TFS、Oracle、Hive等地方。在开发过程中发现,上传到TFS的文件、插入ORACLE、HIVE的数据有乱码。
最终发现原因如下:
1、文件上传的是字节流,其编码未知
2、无论以各种编码去理解该字节流都是不对的
那么,解决方案也比较简单
1、获取到字节流时先判断编码
2、将字节流统一转换成一种编码,比如:UTF-8
其中编码格式判断采用如下方式:
public static String guessEncoding(byte[] bytes) {
String DEFAULT_ENCODING = "UTF-8";
org.mozilla.universalchardet.UniversalDetector detector =
new org.mozilla.universalchardet.UniversalDetector(null);
detector.handleData(bytes, 0, bytes.length);
detector.dataEnd();
String encoding = detector.getDetectedCharset();
detector.reset();
if (encoding == null) {
encoding = DEFAULT_ENCODING;
}
return encoding;
}
需要引入如下jar包:
<dependency>
<groupId>com.googlecode.juniversalchardet</groupId>
<artifactId>juniversalchardet</artifactId>
<version>1.0.3</version>
</dependency>
参考:
http://blog.csdn.net/ajaxhu/article/details/12446917