博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打印机打印字符串转字节数组截取半个中文导致的乱码问题
阅读量:5278 次
发布时间:2019-06-14

本文共 923 字,大约阅读时间需要 3 分钟。

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

 

转载于:https://www.cnblogs.com/bimingcong/p/9185587.html

你可能感兴趣的文章
1.Two Sum(两数之和)
查看>>
Cocos2dx环境搭建
查看>>
深入理解C/C++混合编程优秀博文赏析与学习
查看>>
.NET完全手动搭建三层B/S架构
查看>>
5 X 5 方阵引出的寻路算法 之 路径遍历(完结)
查看>>
时分秒计时器 js
查看>>
解决微信内置浏览器不能下载问题
查看>>
Python的内置函数
查看>>
随笔:写代码和做开发的不同
查看>>
实验二Java面向对象程序设计实验报告(2)
查看>>
【转】Selenium - 封装WebDrivers (C#)
查看>>
ASP.NET Core 企业级开发架构简介及框架汇总
查看>>
基于HANA Cloud的SAP Mobility Platform正式发布
查看>>
java高薪之路__005_IO流
查看>>
谷歌搜索技巧
查看>>
[ Java ] [ Spring ] Spring 一些配置项 及 <context:annotation-config/> 專文解释说明
查看>>
浅谈C10K问题
查看>>
Nexus私服搭建
查看>>
C# 函数式编程:LINQ
查看>>
正则表达式的基本用法
查看>>