使用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. POJ 3087 Shuffle&#39;m Up(模拟)

    Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7404   Accepted: 3421 Desc ...

  2. ORCLE 表中列的修改(非常全面哦)

    今天下午主要做了个实验,是针对 测试表的列,进行添加,修改,删除的.做法如下: 增加一列: alter table emp4 add test varchar2(10); 修改一列: alter ta ...

  3. js函数柯里化

    function curry(fn){ // 代码 } function add(a,b,c){ return a + b + c; } const execAdd = curry(add); exe ...

  4. iOS开发之--沙盒的操作

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...

  5. phpstrom如何定义文件打开的方式

    今天想vue结合PHP来小写一段代码,但是发现自己把vue的文件放进去,会显示text文本,在刚开始的时候,编辑器会提示我们以什么格式打开,我没在意的选择了text,结果悲催了,那么在设置里面的哪个选 ...

  6. Excel表导出

     前言 分别介绍两种导出Exce表格的方法和读取Excel表格数据方法. 1.在MVC下的表格导出. 2.基于NPOI的表格导出. 3.读取Excel表格数据. 第一种方法:在MVC下的表格导出. 首 ...

  7. 《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?

    原创文章,欢迎转载.转载请注明:关东升的博客 运算符是用于执行程序代码运算,会针对一个或一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”.那么“+.-.*./”是运算符 ...

  8. CH5301 石子合并【区间dp】

    5301 石子合并 0x50「动态规划」例题 描述 设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300).每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆, ...

  9. MongoDB 聚合结果大小限制

    The aggregate command can return either a cursor or store the results in a collection. When returnin ...

  10. cocoapod 最新安装使用步骤

    cocoapod 最新安装使用步骤 安装 1.sudo gem update (2个-)system :更新你的gem system至最新 2.gem sources  (2个-)remove htt ...