關於中文編碼問題

來源:互聯網
上載者:User

         最近因為在調試印表機,soft-----到單片機-------通過串口到印表機。   需要把utf-8的編碼轉換成gbk的
網上找了很多例子, 大部分都是 用String str = new String(s.getBytes("utf-8"),"gb2312");   還有的就是說要用ISO的過度一下,  

我不知道寫這些例子的人 到底有沒有試過,反正我用的是完全不對的,也許是用於其他地方。一直沒搞明白希望懂的人能告訴我一聲,先謝了.
 
最後是用這句 urlEncode = URLEncoder.encode (str, "gb2312" ).replaceAll("%", "");轉成功了,能得到對應的gbk編碼  比如說“啊”是%B0%A1,我把%去掉了就對了。  

但是我用
    public   static   boolean   isCS(String   str){
        if(null==str)   return   false;
        if(str.trim()== " ")   return   false;
        byte[]   bytes=str.getBytes();
        if(bytes.length <2)
         return   false;
        byte   aa=(byte)0xB0;
        byte   bb=(byte)0xF7;
        byte   cc=(byte)0xA1;
        byte   dd=(byte)0xFE;
        if(bytes[0] >=aa   &&   bytes[0] <=bb){ //高字芄1�7
         if(bytes[1] <cc   ||   bytes[1]   >   dd){ //低字芄1�7
          return   false;
         }
         return   true;
         
        }
        return   false;
}
這個方法去 校正是不是 gbk編碼 又返回的false

       這裡 gbk 所有字元都是佔兩個位元組的,utf-8是三個位元組。 那為什麼取length的時候 不是這樣的呢,其實裡面有個半形和全形的問題,如果是半形,不管什麼編碼  英文字母 都是一個位元組。就是unicode編碼中的,各種編碼的發展可以自己研究下。如果是全形 你就會發現。gbk卻是是兩個位元組的,才能和他的編碼錶對應上。但是會出現一個問題,空格問題。因為半形和全形的區別就在於後面的空格。有興趣的筒靴可以去看看網上半形全形互相轉換的演算法 其實就是替換空格。。。。
      我把英文字母全轉換成全形,想統一用gbk編碼輸出,但是空格問題一直沒解決。所以最後還是分開處理漢字和英文。(判斷長度,長度小於2的是英文或特殊字元)。希望會處理這種空格問題的筒靴能分享下經驗。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.