免费男女视频_国产系列 视频二区_羞羞视频免费入口网站_久国久产久精永久网页_国产免费观看av_一区二区三区日韩在线观看

JAVA 字符乱码问题处理经验

JAVA 字符亂碼問題處理經驗
 
一、問題背景
 
    同事這邊做了一個小型的數據導入導出軟件。編程環境為Eclipse,JDK版本為1.5,數據庫使用的是MySql5.0。
軟件的基本流程如下:
1、將文本文件中的數據按照一定的截取格式,導入到數據庫中。
2、將導入數據庫中的數據,導出為Excel文件。
 
    看似一點也不復雜。導入非中文數據,一切正常。但是,如果文本文件中,包含中文,則中文部分為‘?’問號。考慮到是字符編碼格式不統一,于是采取如下操作:
1、查看 MySql 的字符設置。發現是latin1。其實latin1也是支持中文的。在數據庫中直接插入數據,中文顯示正確。Eclipse環境為‘GBK’,為了統一,將數據庫設置為‘GB2312’,運行程序。導入的數據仍然是亂碼。
2、為了統一所有字符編碼,將文本數據文件改為UTF-8,將編程環境改為UTF-8,將數據庫字符集改為UTF-8。目前所有格式都統一,因該不會出現亂碼。運行程序,發現在運行時,還未導入數據庫,就出錯。程序終止。
 
二、處理過程
 
1、用C#做了一個小程序,用于檢驗文本數據文件的編碼,發現是”System.Text.DBCSCodePageEncoding”,網上查了些資料,介紹這種字符的不多。嘗試用ASCIIUnicode,UTF-8,UTF-7,格式讀取文件,均為亂碼。最后用Encoding.Default ,來讀取數據,顯示正常。
會不會是程序在讀取文件時,就已經是亂碼了呢?而不是導入數據庫才出的問題。帶著這個疑問,在取數據時,用 System.out.println 輸出驗證了一下,發現果然如此。讀取數據程序,是將文本數據中的每一行按某個標志位拆分,放入到數組中。與是,我做了一個字符轉換,不是轉換整個文件(因為轉換整個文件,之前嘗試會導致截取Byts出錯)。于是,我在取文件時,還是按原文件編碼去取,將截取后的字符串,讀入數組后,我在做轉換。
見如下程序:
     str = str.substring(0,str.lastIndexOf(ConstDef.SEP));//原程序
     //System.out.println(str);
     byte[] tempByte = str.getBytes("GBK");
     String a = new String(tempByte,"GB18030");
     //System.out.println(a);
 str = a;
 
這時,再用System.out.println輸出轉換后的程序,發現中文能正常顯示。
 
2、但是,傳入到數據庫中的值,中文還是亂碼。接下來就好辦了,數據庫用的是latin1,可以和ISO8859-1兼容。于是,在將讀取數組后,存入MySql的過程數據,轉換為 ISO8859-1
見以下程序:
    String a = null;
       byte[] tempByte = null;
      
       try
        {
           tempByte = string.getBytes("GB18030");
           a = new String(tempByte,"iso8859-1");
       } catch (UnsupportedEncodingException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
    }
 
    System.out.println 輸出-         System.out.println(stmt.toString());
 
發現插入的字符帶有問號“?”,但在數據庫中查看,發現已經是中文,離成功又更近了一步。
 
這里的中文為?”問號,是由于編程環境(GBK)與轉換的字符不統一的原因。
 
 
    PreparedStatement stmt = null;
       try {
           stmt = conn.prepareStatement(sql);       
           //System.out.println(stmt.toString());
           retVal = stmt.executeUpdate();
       } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } finally
        {
           try {if(null!=stmt) stmt.close();}catch(Exception e){}
    }
 
3、數據庫查看,中文已經能正常顯示,但是導出的Excel 文件,中文仍然是亂碼。問題還是出在字符編碼問題上。在做一次轉換。把從數據庫中拿出的數據,由ISO8859-1轉換為:"GB18030"查看導出的Excel文件,中文顯示正常。
 
4、中文字符亂碼問題解決。
 
三、經驗
 
1、有時將整個文件做字符轉換,雖然容易,但是在某些時候不可行。必要情況下,要把原數據文件按原數據編碼讀出,逐條轉換。
2、在理論的基礎上,多加實踐,受益匪淺。
主站蜘蛛池模板: 免费观看黄色一级视频 | 日本在线不卡免费 | xxxxhd73国产 | 美国一级黄色毛片 | 深夜视频在线 | 嫩呦国产一区二区三区av | 久久99精品久久久久久青青日本 | 人禽l交免费视频观看 视频 | 欧美 国产 综合 | 精品国产一区二区三区成人影院 | 久久久久电影网站 | 欧美日韩亚州综合 | 亚洲成人高清电影 | 九九热在线视频观看 | 97视频| 91九色丨porny丨国产jk | 久久久久中精品中文字幕19 | 精品国产91一区二区三区 | 国产毛片在线 | 插插操 | 精品国产91久久久久久浪潮蜜月 | 精品国产一区二区久久 | 成人啪啪18免费网站 | 黄色av电影在线播放 | 天天舔天天插 | 男人午夜小视频 | 中国a毛片 | 久久精品一级片 | 欧美a级大胆视频 | 国产精品视频海角社区88 | 国产在线观看av | 妇子乱av一区二区三区 | 日本在线视频一区二区三区 | 本色视频aaaaaa一级网站 | 97中文字幕第一一一页 | 免费看一级视频 | 中文字幕综合在线观看 | 欧美日韩国产成人在线观看 | 国产一精品久久99无吗一高潮 | 中文字幕爱爱视频 | 国产91丝袜在线播放0 |