【问题标题】:SerialPort in C# doesn't send correctly Extended ASCII charC# 中的 SerialPort 无法正确发送扩展 ASCII 字符
【发布时间】:2019-06-13 19:09:54
【问题描述】:

我在 C# 中使用 SerialPort,但发现无法发送扩展的 ASCII 字符。

如果我发送一个低于 128 的字符,它会正确传输,否则我总是传输 0x3F

comport.Write(((char)127).ToString());  ///I receive 0x7F 
comport.Write(((char)128).ToString());  ///I receive 0x3F

是否有特定设置允许我将字符从 0x00 发送到 0xFF?

【问题讨论】:

  • 使用byte.....
  • @DanielA.White 如果我更改为comport.Write(((byte)128).ToString());,我会发送 3 个字符:'1'、'2'、'8'
  • 不要打电话给.ToString()

标签: c# serial-port non-ascii-characters


【解决方案1】:

来自docs

默认情况下,SerialPort 使用 ASCIIEncoding 对字符进行编码。 ASCIIEncoding 将所有大于 127 的字符编码为 (char)63 或 '?'。要支持该范围内的其他字符,请将 Encoding 设置为 UTF8Encoding、UTF32Encoding 或 UnicodeEncoding。

所以你应该改变comport对象的Encoding属性。

【讨论】:

  • 谢谢!经过一些测试,我注意到对我来说正确的编码是以下comport.Encoding = Encoding.GetEncoding(28591);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多