qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题
使用qqwry.dat进行IP地理位置查询时,遇到一个问题即在本地测试时查询纯真库时正常,没有任何问题,但是打包传到服务器上便出现了乱码问题。
1.首先排除服务器的字符集编码的影响
使用如下命令验证了本地和服务器的编码是一致的
1 2 | [root @master ~]# echo $LANG en_US.UTF- 8 |
2.查看qqwry.dat发现该文件是二进制文件,文件自身不存在编码的问题
1 2 | [root @master ~]# file -i qqwry.dat qqwry.dat: application/octet-stream; charset=binary |
3.从IP库中读取并encoding的时的时候会不会有问题?发现同样在本地都是显示正常,但是传到服务器上全都是乱码。
1 2 3 | logger.info( "utf-8" + new String(b, offset, len, "utf-8" )); logger.info( "gbk" + new String(b, offset, len, "gbk" )); logger.info( "gb2312" + new String(b, offset, len, "gb2312" )); |
4.公司前辈,指点迷津 让我把未编码前的信息打出来,我把byte[]数组里面的二进制数据打印出来
1 2 3 4 5 6 7 8 9 10 11 12 | public static String getString( byte [] b, int offset, int len, String encoding) { try { String bts= "" ; for ( int i= 0 ;i<b.length;i++){ bts = bts+String.valueOf(b[i]); } logger.info( "bytes [] " +bts); return new String(b, offset, len, encoding); } catch (UnsupportedEncodingException e) { return new String(b, offset, len); } } |
5. 问题出来了,同一个IP从IP库中获取的byte数组是不一样的!!!
6. 为什么读取出来的信息是不一样的?使用md5sum查看一下文件的md5是否一致,发现本地的qqwry.dat的md5居然和服务器上的不一致!
1 2 3 4 5 | [root @master target]# md5sum qqwry.dat 8ad56a81343333406a78cfc81ad44cb7 qqwry.dat [root @master target]# md5sum qqwry.dat 3c1db0363910a08a4cc2bbd81e1b0e14 qqwry.dat |
7.将本地qqwry.dat scp传到服务器上,是可以的。
8.打包之后的文件不行?直接scp传上去的是正确的?难道是打包的时候出错了吗?
再一次打包上传,发现不仅md5不一样而且文件大小差距也很大,
1 2 3 4 5 | [root @master target]# du -h qqwry.dat 8 .9M qqwry.dat [root @master target]# du -h qqwry.dat 16M qqwry.dat |
9.我擦,仔细检查了一下自己maven项目qqwry.dat放到了resources目录下,看不出来什么问题。
查阅资料得知,是因为在maven打包时,对于二进制类型的文件,需要filter过滤掉不然文件会错乱掉!
修改pom.xml的配置内容,重新打包之后发现文件正常了,和源文件的大小是一样的了,上传之后重新测试也是ok了。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>dat</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
10.查阅官网的解释http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html,非常明了!
总结:
maven打包时如果有用到二进制类型的资源文件,记得在pom.xml中将其过滤掉,不然编译打包完成之后产生的文件会和打包前的不一样。
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现