1. 程式人生 > >打印機打印字符串轉字節數組截取半個中文導致的亂碼問題

打印機打印字符串轉字節數組截取半個中文導致的亂碼問題

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

打印機打印字符串轉字節數組截取半個中文導致的亂碼問題