中文亂碼的問題

寫的有些亂  不喜歡 勿噴  。有一點可以肯定的是 每一個場景 沒一個過程都是實實在在。

 

場景:

前端 調  java的接口   讀寫服務器上的配置文件,同時這個文件寫入的數據  c的程序也要去讀取文件。相當於文件是個數據源,在業務側起到一個切換場景,工廠模式裏面的不同參數的角色。

 

 

問題 :

            1、java的程序用的是第三方的ini4j的 類庫直接對文件進行讀寫。這個庫 默認就是utf8 的編碼格式 不管是讀還是寫都是utf-8的字符編碼。這個最一開始只是在xshell  顯示有問題  前臺展示沒有問題,c那邊讀取時亂碼。

            2、 改了寫入的字符編碼 然後 c那邊沒有問題了,但是前臺展示有問題了,同時自己的demo在xshell控制檯打印的也是有問題

           3、  把讀寫強制的加入了 字符編碼的格式約束,這個過程花了不少時間,因爲最一開始不知道是什麼原因。現場c的程序一會讀的是亂碼,一會不是亂碼很煩。用了那個iconf 命令轉化也是不行。

           4、 就是把所有的都對齊了 就是前端  java接口  文件編碼   服務器編碼  c端的編碼  最後發現 用cat  和vim  打開是時候兩個又是亂碼,  還有就是  後面寫入的會導致前面的內容是亂碼。控制檯打印的  時而亂碼時而不亂碼。把服務器上的文件導下來看也是亂碼的。你改過流的編碼過後,之前在本地調試的部分瞬間又跑不通了,很是詭異, 瞬間就爆炸了。

 

問題解決的過程:

  服務器上

     創建一個空文件

     用  file  文件名   命令看是 沒有編碼的  說明:文件的編碼主要是針對你輸入的流的編碼  

     用 服務器上的編輯工具   cat   vim   進行編輯 後

     你會發現 不帶中文的文件就是 ASCII 編碼 

     帶中文的文件就是  ISO8859-1   

     你在服務器上看文件編碼大部分都是   ASCII ISO8859-1 尤其是etc下面的配置文件

  本地(window)創建文件  然後傳到服務器上(linux)

     本地創建一個用記事本打開的 一個沒用中文傳到 服務器上  然後用 file  查看 是 ASCII編碼  帶中文的就是  ISO8859-1

     本地穿件一個用字符編碼 uft8  的那麼傳到服務器不管中英文都還是utf8   這個爲什麼utf8  作爲網絡通信常用的原因雖然佔的資源多。

     即 除了utf8 服務器和 本地保持一致,其餘帶中文的服務器上就是ISO8859-1 不帶中文的就是  ASCII 

 

===================================下面就是調試測試的============================================

控制讀取的字符編碼

    InputStreamReader  isr  = new InputStreamReader(new FileInputStream(filePath), "GBK");
    Wini ini = new Wini(isr);

 

控制寫入的字符編碼

OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(new File(filePath)), "GBK");
ini.store(oStreamWriter);

 

     其它的業務代碼就沒有貼了 總要是說明一下Inij4j也可以具體的切換不同的字符編碼。 (默認的是utf8)尤其是在服務器的時候是其它編碼的時候你用其它的去寫  這樣文件就變成是utf8的格式。  這樣很容易出問題。

 

  還有一個問題就是當你的文件原本是utf8 的格式 用utf8 的操作沒有問題 ,然後在原來文件的基礎上用GBK或者其它的字符集的時候你會發現  上次寫入的utf8的東西是亂碼。這樣就要求你文件是什麼格式 那你至始至終就得用什麼格式編碼,主要是中文他煩,英文貌似不會遇到這樣的問題。

 

 

  就是在測試的過程你會發現你文件的,又會各種亂碼。這裏主要就是  xshell   文件編碼  還有就linux環境變量設置和控制的

 

就是說 你服務器文件是iso8859-1  那麼你用的xshell終端必須是gbk 系列的編碼  看差不會保證不會亂碼。如果你文件是iso8859-1  那你xshell終端用utf-8  你不管用 cat  還是vim  都會是亂碼的。還有就是你的流輸出的是什麼編碼  必須和環境編碼的 LANG d對應起來  有些人說要改  /etc/systemconf/i18n 文件 最近幾天貌似和這個對應不起來  就是說 LANG  設置的是zh_un.GK2312  

/etc/systemcon/i18n 設置的對應的是 utf8 的格式 如果你的流是ut8 格式輸出的東西在xshell控制檯是亂碼的。也就是說LANG 是對控制檯起決定性作用的。

還有就是上面提到的 對同一個文件 第一次是utf8  第二次  gbk  這樣有可能導致之前的uft8 格式寫入的東西是亂碼,這個時候你不管是用gbk 輸出還是utf8 輸出  LANG 不管怎麼設置也都是亂碼, 同時你在 shell改變中段的 字符也是亂碼的。也是我就是亂碼的  和展示  打印沒有關係 換個編碼  我只是將這個亂碼變成下一個亂碼。

 

 

參考資料:

解決中文亂碼的問題

https://jingyan.baidu.com/article/ab69b270de8b4f2ca7189f1d.html

解決vim   和用cat  顯示亂碼的問題。

https://blog.csdn.net/onepiecehuiyu/article/details/75208743

編解碼:

https://blog.csdn.net/zhblanlan/article/details/81458943

 

ini4j 編碼問題

https://blog.csdn.net/cp1153750171/article/details/81432939

 

注:  參考鏈接裏面的東西 和我驗證的對應不起來  因此和我寫的有些出入,實際還是根據大家驗證的爲準, 實際纔是檢驗真理的唯一標準。

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章