代码-检测文件的编码

需求

产品经理要求上传文件到服务器,但是文件没有模板,文件的编码格式不定,因此不能通过指定的编码格式解析文件,否则会出现乱码。

文件编码识别
(1)UTF-8 BOM编码的文件,前3个字节转换成10进制数后分别是:-17、-69、-65。

(2)UTF-16BE BOM编码的文件,前2个字节转换成10进制数后分别是:-2、-1。

(3)UTF-16LE BOM编码的文件,前2个字节转换成10进制数后分别是:-1、-2。

因此,这三种编码格式的文件检测起来比较简单,只需要拿到文件的前三个字节,然后根据上面的规则就可以确定文件是什么编码。问题是这种检测方式只能区分UTF-8 BOM、UTF-16BE BOM和UTF-16LE BOM编码的文件,不能区分UTF-8和GBK编码的文件。
在这里插入图片描述
由于上传的文件只有中文和英文,在生产环境运行了一段时间,目前来看是满足要求的。比如Google的字符编码检测工具会返回WINDOWS-1252这样的编码格式,这种默认用GBK编码就可以。还有一些检测不出来的编码格式,返回null,这种也用默认的GBK就行。

Google开源Java字符编码检测工具介绍

Maven坐标如下:

<dependency>
	<groupId>com.googlecode.juniversalchardet</groupId>
	<artifactId>juniversalchardet</artifactId>
	<version>1.0.3</version>
</dependency>

Google字符编码检测工具Java代码示例,目前来看检查UTF-8和GBK编码没有问题,但是其它编码存在问题,由于上传的文件只有中文和英文,因此稍微做了点兼容性处理,当编码获取错误时,默认取GBK编码。编码检测工具在生产环境运行了一段时间,目前来看没发现什么问题。

Google开源Java字符编码检测工具介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值