1. 程式人生 > >Java之——qqwry.dat輸出亂碼問題及maven打包後資原始檔大小不一致的問題

Java之——qqwry.dat輸出亂碼問題及maven打包後資原始檔大小不一致的問題

使用qqwry.dat進行IP地理位置查詢時,遇到一個問題即在本地測試時查詢純真庫時正常,沒有任何問題,但是打包傳到伺服器上便出現了亂碼問題。

1.首先排除伺服器的字符集編碼的影響

使用如下命令驗證了本地和伺服器的編碼是一致的

[[email protected] ~]# echo $LANG
en_US.UTF-8
2.檢視qqwry.dat發現該檔案是二進位制檔案,檔案自身不存在編碼的問題
[[email protected] ~]# 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居然和伺服器上的不一致!

[[email protected] target]# md5sum qqwry.dat
8ad56a81343333406a78cfc81ad44cb7  qqwry.dat

[[email protected] target]# md5sum qqwry.dat
3c1db0363910a08a4cc2bbd81e1b0e14  qqwry.dat

7.將本地qqwry.dat scp傳到伺服器上,是可以的。

8.打包之後的檔案不行?直接scp傳上去的是正確的?難道是打包的時候出錯了嗎?

再一次打包上傳,發現不僅md5不一樣而且檔案大小差距也很大,

[[email protected] target]# du -h qqwry.dat
8.9M	qqwry.dat

[[email protected] 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>


總結:

maven打包時如果有用到二進位制型別的資原始檔,記得在pom.xml中將其過濾掉,不然編譯打包完成之後產生的檔案會和打包前的不一樣。


相關推薦

Java——qqwry.dat輸出亂碼問題maven打包原始檔大小一致的問題

使用qqwry.dat進行IP地理位置查詢時,遇到一個問題即在本地測試時查詢純真庫時正常,沒有任何問題,但是打包傳到伺服器上便出現了亂碼問題。1.首先排除伺服器的字符集編碼的影響使用如下命令驗證了本地和

Gradle或Maven打包專案原始檔問題

出現這個問題一不小心容易弄得人,心力交瘁,當我們用Gradle或者Maven構建web專案的時候,少不了要打包*.xml或者*.properties檔案,但是預設的情況下,gradle和maven總會很智慧的不去載入這麼些資源,於是乎當你採用如下形式放置檔案打包並執行web專

maven編譯原始檔損壞

第一種方式 maven打包時,過濾不編譯檔案型別 <plugin> <groupId>org.ap

Python2windows輸出亂碼倒計時程式碼處理

#!/usr/bin/python # -*- coding: utf-8 -*- import os import sys import time import platform # 亂碼處理 sys_encoding = sys.getfilesystemencoding() def

java轉換編碼輸出文字

package classtest; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExcept

JAVA利用陣列輸出楊輝三角形

package test; public class Demo1 { public static void main(String[] args) { int num[][]=new int[

Java標準輸入輸出流以及標準錯誤輸出流的基本使用

標準輸入輸出流以及標準錯誤輸出流的基本使用: System.out  是一個特殊的 PrintStream "標準"輸出流  ==》 輸出結果到控制檯System.err  是一個特殊的 Print

java專案釋出tomcat伺服器流程記錄 maven打包tar壓縮scp上傳

近期因為工作需求,開始接觸發布專案到伺服器,下面簡單記錄釋出專案需要的流程 1,拉去線上程式碼,使原生代碼為最新版,我使用的命令:     git pull 2,使用maven命令打包本地專案 ,命令:      mave

Maven打包配置檔案亂碼的問題

把web工程的war包釋出到linux伺服器上總是報錯exception is com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 3 o

Maven打包,中文亂碼

1. 中文環境 2.eclipse中設定工程是utf-8 3.要保證中文不會亂碼,需要在maven的 pom.xml檔案中 追加如下配置: <properties><project.build.sourceEncoding>UTF-8</pro

jenkins 自動從svn獲取源碼通過maven打包發布到遠端tomcat

文件 webapp release manage 內容 ner name 協商 -a 手動生成web的war源碼文件。mvn archetype:generate -DgroupId=com.companyname.automobile -DartifactId=truck

maven打包flash檔案變大,無法正常執行

最近一個老專案重構,前臺使用了swfupload來實現多檔案上傳,這是一個用flash實現的外掛。 開發階段,打包測試時均無問題。測試階段,在伺服器部署後,該外掛就莫名失效了。 經過排查最終確認是maven打測試包時,加上了資源過濾導致swfupload.swf檔案變大。  

spring boot maven 打包提示 “程式包找到” 解決方法。

再用springboot maven打包的時候會碰到 找不到“程式包找不到” 的問題。解決放下如下 修改父pom.xml配置檔案。 由原來的 <build> <plugins> <plugin>

#maven--maven打包報告某個類找到符號

如果打包時遇到下面的錯誤: [ERROR] D:\bootstrapWorksource\test\src\main\java\com\yzh\maven\interceptor\HandlerInterceptor1.java:[45,24] 錯誤: 找不到符號 [ERROR] 符號: 類

maven打包專案的時候找到jar包,但是專案裡面改已經有相關jar包

maven的setting.xm需要配置jdk 全域性 <profiles> <id>jdk-1.8</id> <activation>

Intellij IDEA使用MAVEN打包丟失程式碼原始檔夾下配置檔案

         最近用Maven建立了一個Spring Web專案,在跟Mybatis整合時,tomcat控制檯老是報錯(找不到Mapper對應的XML配置檔案),無意中發現編譯後的classes資料夾(或者war包)對應的目錄根本沒有相應的xml配置檔案。解決方式是,在

Maven工程中jetty外掛執行web應用時靜態原始檔修改能實時生效的問題

  2.找到useFileMappedBuffer引數,把值設成false     <init-param>         <param-name>useFileMappedBufferparam-name>         <param-value>false&l

iOS經典講解App上架(可供銷售)App Store搜尋到的解決辦法

App好不容易稽核通過了,手動釋出版本後,不斷地在App Store搜尋,就是搜不到,都是蘋果的快取機制惹的禍。急不急,一般情況下發布版本後幾個小時或者更短時間App Store就會顯示,但是有的時候甚至一兩天都沒有,怎麼辦,尋求蘋果客服顧問幫助當然是一種最保險的方法。但是對

Android apk 簽名程式碼混淆、原始檔混淆、加固整套流程

準備:*.ks  proguard-android.txt', 'proguard-rules.pro(取一) 上述是簽名檔案及混淆檔案 通過AS進行混淆簽名打包apk 將該apk進行解壓可看出只是程式碼進行了混淆但是資原始檔沒有進行混淆 下面進行資原始檔進行混淆,也是通

maven打包失敗,程式包***存在,找到符號

由於專案引用第三方jar包(非maven倉庫),打包專案時報錯        程式包***********不存在,********找不到符號(*號對應的路徑是第三方jar包路徑)1.找到存放第三方jar包資料夾 (例如src/main/webapp/WEB-INF/lib)