Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 11851|回复: 14

怎样向串口发送汉字?

[复制链接]

该用户从未签到

发表于 2009-6-19 18:46:15 | 显示全部楼层 |阅读模式
我用的是一个ARM  WINCE  的开发板,通过串口联接的打印机,只能向打印机发送西文,不能打印汉字,打印机是自带字库的.
回复

使用道具 举报

该用户从未签到

发表于 2009-6-19 20:21:04 | 显示全部楼层
主要是关于汉字编码的问题,理论上来说WINCE的代码为Unicode,但是不出意外打印机的字符集是GB2312,不巧的是LAZARUS内部用的是ansi,所以在输出打印机之前一定要确认你的汉字代码是gb2312.
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-6-19 20:36:02 | 显示全部楼层
这么说吧,lazarus内部的代码集是ANSI,我们不用管他,假设它就是我们所需要的字符集,关键是我们需要知道,你的数据是哪里来的。如果是用户输入的,由于系统是用的unicode,所以你要对输入的数据作代码转换,转换方法是UTF8DECODE(输入字符串)。如果是内部定义的数据,也有两种情况。
情况1:没有使用UTF8编码整个project,而是用默认的字符集ANSI,其实基本上就是GB2312,因为你输入的字符再Windows里就是用GB2312的。除非你够狠,在Linux或unix里编的。这时候,你不需要任何做任何转换。不过,这不是我建议的。
情况2:使用了utf8编码了整个PROJECT,这时候你需要用ansiTOutf8来转换你内部输入的字符。
致以我这里说的内部输入的汉字,是指比如:
HEADER:='现金'
喝了点酒,有点晕,先说到这里。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-6-20 08:08:00 | 显示全部楼层
myseries.Send(UTF8DECODE(edt_Send.Text));
今天早上作了一个测试打印不成功,没有任何反应啊?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-6-20 08:13:32 | 显示全部楼层
另外,你的打印机是什么牌子的阿?现在自带字库的打印机不多了。测试办法是在DOS下用DOS命令直接输出PRN短口汉字就可以知道了。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-6-20 08:21:53 | 显示全部楼层
我曾经试过直接向串口写汉字,送字节过去也不行的。
myseries.Send(CHR($FE)+CHR($BA));

        myseries.Send(CHR(13)+CHR(10));
高字节在前。。。

myseries.Send(CHR($BA)+CHR($FE));

  打印一个“湖”字  根本无法打印的
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-6-20 08:24:40 | 显示全部楼层
炜煌打印机   自带字库的,加我   QQ:421906156   我传一份说明给您.DAMCOOL
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-6-20 08:39:10 | 显示全部楼层
我不用QQ的,另外在Windows建一个文本文件,比如test.txt,里面放些汉字。在DOS窗口输入命令type test.txt >prn就可以检测是否真的带汉字库,或者汉字库支持打开的。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2009-6-20 08:43:21 | 显示全部楼层
对了,你端口打开的代码段中设置DCB.ByteSize是多少?应该是8位,否则,结果就是你这样了。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2009-6-20 08:53:38 | 显示全部楼层
有邮箱吗?我传一个程序给您看一下吧。
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 13:35 , Processed in 0.046671 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表