zoukankan      html  css  js  c++  java
  • 打印机打印字符串转字节数组截取半个中文导致的乱码问题

        打印机打印的时候  要求:打印一行文字,但这行文字实际长度 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

  • 相关阅读:
    Repeater 双向排序
    将具有固定格式的text 类型中的数据分离出来的一种方法
    ASP.NET 快速构建应用程序页面主框架
    2分分页处理存储过程通用存储过程
    C#3.0之匿名类型
    常用的js收集
    用CSS实现DataGird滚动而表头不动
    Lucene.Net 创建索引和检索
    Lucene.net 实现全文搜索
    SQL 中操作日期的几个函数
  • 原文地址:https://www.cnblogs.com/bimingcong/p/9185587.html
Copyright © 2011-2022 走看看