使用qqwry.dat进行IP地理位置查询时,遇到一个问题即在本地测试时查询纯真库时正常,没有任何问题,但是打包传到服务器上便出现了乱码问题。

1.首先排除服务器的字符集编码的影响

使用如下命令验证了本地和服务器的编码是一致的

[root@master ~]# echo $LANG
en_US.UTF-8

2.查看qqwry.dat发现该文件是二进制文件,文件自身不存在编码的问题

[root@master ~]# file -i qqwry.dat
qqwry.dat: application/octet-stream; charset=binary

3.从IP库中读取并encoding的时的时候会不会有问题?发现同样在本地都是显示正常,但是传到服务器上全都是乱码。

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[]数组里面的二进制数据打印出来

    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居然和服务器上的不一致!

[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不一样而且文件大小差距也很大,

[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中将其过滤掉,不然编译打包完成之后产生的文件会和打包前的不一样。  

qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题的更多相关文章

  1. 【maven】Maven打包后为何文件大小改变了

    项目中使用了X.509证书,用Maven打包后,测试时报错: java.security.cert.CertificateException: Could not parse certificate: ...

  2. Spring Boot使用Maven打包替换资源文件占位符

    在Spring Boot开发中,通过Maven构建项目依赖是一件比较舒心的事,可以为我们省去处理冲突等大部分问题,将更多的精力用于业务功能上.近期在项目中,由于项目集成了其他外部系统资源文件,需要根据 ...

  3. 一种常见的maven打包后同名文件冲突错误

    在使用一些开源框架的时候(比如spark.hadoop.lucene等),偶尔会见到说找不到某个具体实现类或者某个配置(比如spark的akka配置)不见了. 部分例子如下: [Lucene]An S ...

  4. vue项目打包后资源相对引用路径的和背景图片路径问题

    vue项目中若要使用相对路径来获得相应静态资源,需要修改以下内容来确保项目打包后能正常运行. 1.修改config => index.js => build => assetsPub ...

  5. Maven打包后的文件存在中文乱码

    发现打包的js文件虽然是UTF-8格式的编码,但是有中文有乱码 可设置jvm的编码,两种方法: 在系统的环境变量中添加一个变量,名为: JAVA_TOOL_OPTIONS, 值为:-Dfile.enc ...

  6. Maven打包时去掉项目版本号

    Maven打包后,jar或war文件名里带有版本号信息,如projectname0.0.1-SNAPSHOT.jar等,怎么去掉呢? 解决办法: 打开项目pom.xml文件,在<build> ...

  7. 初次学习DropWizard框架——解决maven打包时出现没有主清单属性的问题

    笔者因为公司的项目需要,开始接触DropWizard框架,照着官网https://www.dropwizard.io/0.9.2/docs/getting-started.html撸了一遍. 工具为I ...

  8. maven打包oracle jdbc驱动

    背景 由于版权问题,maven中央仓库缺少oracle jdbc的驱动,这个给开发带来了很多不便利性.也出现各种各样的解决方案,基本就两种思路: 将oracle驱动安装到本地仓库,这个需要大家统一好名 ...

  9. 【笔记】vue-cli 打包后路径问题出错的解决方法

    几天之前打包自己的vue 项目上传到远程服务器上面 但是遇到了如下几个问题: 1. 线上浏览页面时是空白页面 2. 打包后资源文件(js, css 文件)引用的路径不正确 3. 开发环境中使用到的如: ...

随机推荐

  1. ACM计算几何模板——二维几何基础(基本运算,点和线,多边形)

    /*==========================*\ | 计算几何基础函数 | | 1.点和向量的定义 | | 2.向量的基本运算 | | 3.点积 | | 4.向量长度 | | 5.两向量角 ...

  2. jQuery编程中的一些核心方法简介

    调用 jQuery 对象的方法很简单: $('h1').remove(); 大多数 jQuery 方法都是像上面这样被调用的,这些方法都位于 $.fn 命名空间内,这些方法称为 jQuery 对象方法 ...

  3. 剑指 offer set 26 不用加减乘除做加法

    总结 1. Leetcode 上有一道题, 是不用乘除做乘法, 那道题算是背包问题的变形 2. 不用加减乘除, 还可以用移位操作 3. 将数字转成二进制格式, 然后运用二进制亦或, 移位运算解决 3. ...

  4. Makefile foreach(转)

    原文出处:http://blog.csdn.net/cjsycyl/article/details/8064871 foreach 函数和别的函数非常的不一样.因为这个函数是用来做循环用的,Makef ...

  5. Python 使用正则表达式匹配IP信息

    使用正则表达式匹配IP地址 .MAC地址 .网卡名称: #!/usr/bin/env python #-*- coding:utf-8 -*- import re from subprocess im ...

  6. shell脚本学习总结12--系统信号

    信号是Linux系统中一种进程通信机制.我们可以使用特定的信号来中断进程.每一种信号都同一个整数值相关联. kill命令可用来想进程发送信号,而trap命令用来处理所接收的信号. kill 列出所有可 ...

  7. asp 中创建日志打印文件夹

    string FilePath = HttpRuntime.BinDirectory.ToString(); string FileName = FilePath + "日志" + ...

  8. Zabbix高可用

    上一篇:Zabbix数据库表结构 安装两台Zabbix-server 两台均安装MySQL数据库 数据库做双主互相同步 keepalive做vip偏移 to_master.sh脚本 两边都要安装ssh ...

  9. SOI简单体验

    导语 arcgis for server10.3.1中提供了一个新的功能叫做soi.本文简单的介绍soi概念,实现,在使用过程中的注意事项.阅读本文和使用soi需要以下先决条件 SOI是ArcGIS ...

  10. python基础-第十三篇-13.1web框架本质

    基础与概念 众所周知,对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 web框架分两类:一类是包括socket和业务逻辑(tornado),另一 ...