打印機打印字符串轉字節數組截取半個中文導致的亂碼問題
阿新 • • 發佈:2018-06-15
color html gbk 16px ++ 出現 con tro div
打印機打印的時候 要求:打印一行文字,但這行文字實際長度 len(單位是:px)是固定的
這時候我們的思路是 :GBK編碼下漢字占用兩個字節,而且這兩個字節都是負數,char型字符占用一個字節,
每個漢字占用的寬度是24px 每個char型占用的寬度是12px 換言之每個字節占用的打印寬度是12px
本行所容納的字節個數 num=len / 12;
這時候我們將字符串轉為字節數組 截取num個字節放到字節數組,然後轉為字符串就是該行打印的字符串
但是有個問題就是 當我們截取的最後一個字節是漢字的一半(漢字由2個字節組成) 這個時候就會出現亂碼,怎麽破?
其實很簡單 統計這num個字節中值為負數 的個數 如果是偶數說明沒有截取半個漢字的情況出現,
如果是奇數說明有半個漢字的情況出現
這裏有個重點 將字符串轉換為字節數組時要轉為GBK編碼 的字節數組 因為 在GBK編碼下漢字占用兩個字節,而且都是負數,方便統計
String str="雙節棍愛好友h為太原"; byte[]source=str.getBytes("GBK");
public boolean isHasHalfChiness(byte[] source){int count=0; for (int i = 0; i < source.length; i++) { if(source[i]<0){ count++; } } return count%2 == 0 ? false : true; }
遇到有半個漢字的情況就不截取最後一個字節就OK了 然後其他的另起一行打印什麽的就不用說了
大家遇到打印機這方面問題的可以找我交流,共同學習進步!
嚴禁盜版
轉載請註明出處:https://www.cnblogs.com/bimingcong/p/9185587.html
打印機打印字符串轉字節數組截取半個中文導致的亂碼問題