请教--- Serialport如何将ASC码大于127的值发送出COM
我在对点阵打印机应用编程过程中碰到了需要自定义字符的情况,在通过Serialport 将字符码发送出去时,ASC码大于127的出现数据错误,SerialPort1.Write(Chr(27) & Chr(38) & Chr(61) & Chr(2) & Chr(124) & Chr(64) & Chr(192) & Chr(64) & Chr(0)) ’“广”的自定义码
SerialPort1.Write(Chr(27) & Chr(37) & Chr(61) & "A" & Chr(0)) '将A替换为“广”
SerialPort1.WriteLine("A") ’打印A (理论上应该会打印 “广”,但实际上 少了 “、”及下面的“.“,即chr(192)丢失)
网上也查了一下,说是ASC大于127时发送会有问题, 但解决方法是针对MSCOMM的, 我现状使用vb.net 2010 serialport控件。
请问有什么好的解决方法吗? 谢谢 --------------------编程问答-------------------- --------------------编程问答-------------------- 以下的例子可以重现问题:
'将A B chr(129) C D 发送到COM
SerialPort1.Write(Chr(65) & Chr(66) & Chr(129) & Chr(67) & Chr(68))
'从COM读数据并在Textbox1中显示
Testbox1.text = SerialPort1.ReadLine()
结果: Textbox1中显示 AB (后3个不见了)
如果将Char(129) 拿掉, 则可以显示出 ABCD.
此例子也说明Serialport 发送ASC码大于127时出现问题。
请教高手给些建议。 谢谢 --------------------编程问答-------------------- 不知道你解决没。反正我是解决了,那个是编码的问题,我也是找了好久的资料才找到的。
MSDN上Write方法的备注:
http://msdn.microsoft.com/zh-cn/library/y2sxhat8(v=vs.85).aspx
默认情况下,SerialPort 使用 ASCIIEncoding 对字符进行编码。ASCIIEncoding 将所有大于 127 的字符编码为 (char)63 或“?”。若要支持该范围中的其他字符,请将 Encoding 设置为 UTF8Encoding、UTF32Encoding 或 UnicodeEncoding。
所以要修改SerialPort的编码,我使用的语言是C#,我把UTF8,UTF16,Unicode都试过了,接收的时候还是不能接收大于127的数据。
最后在:http://suifeng0498.blog.163.com/blog/static/5465526320099275840596/,找到了答案。
修改:mysport.Encoding = Encoding.GetEncoding("iso-8859-1");
之后接收大于127的数据就没问题,不修改的时候接收到的数据是63。
没试过发送,因为我那程序用不到发送,但接收没问题,发送肯定也不会有问题吧。 --------------------编程问答-------------------- 顶一下这个问题
--------------------编程问答-------------------- 顶,3楼的方法可行!
补充:.NET技术 , VB.NET