当前位置:编程学习 > C#/ASP.NET >>

请教--- 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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,