最近因為在調試印表機,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的是英文或特殊字元)。希望會處理這種空格問題的筒靴能分享下經驗。