串行端口编码-我如何得到8位ASCII

本文关键字:8位 ASCII 何得 编码 串行端口 | 更新日期: 2023-09-27 18:06:28

我有一个通过串行端口通信的程序的问题。它必须发送和接收的字符之一是度数符号,ASCII 0xBF。它已经工作多年了,现在突然串行端口对象已经开始下降位7,所以我得到0x3F而不是0xBF。

我确信这是我做的一些愚蠢的事情,因为我最近在那个区域修补了我的代码-但是我看不出我做了什么导致第8位丢失。

我的端口被这样初始化:

    BaudRate              9600  int  
    DataBits              8 int  
    DiscardNull true    bool
    DtrEnable             true  bool
    Encoding    {System.Text.ASCIIEncoding} System.Text.Encoding                  Handshake           None  System.IO.Ports.Handshake
    NewLine           "'n"  string
    Parity            None  System.IO.Ports.Parity
    ParityReplace   63  byte
    PortName              "COM4"    string
    ReadBufferSize  128 int
    ReadTimeout 250 int
    ReceivedBytesThreshold  1   int
    RtsEnable             true  bool
    StopBits              One   System.IO.Ports.StopBits
    WriteBufferSize 64  int
    WriteTimeout    1500    int

任何想法我如何恢复端口到8位操作?

串行端口编码-我如何得到8位ASCII

您的问题是ASCIIEncoding是7位编码。您正在寻找支持扩展ASCII的东西。

下面的代码将显示Codepage 1252。

System.Text.Encoding.GetEncoding(1252);

这将获得ISO 8859-1。

System.Text.Encoding.GetEncoding(28591);

这两个都被认为是扩展ASCII,并且都包含通常与此集合相关的符号(大多数具有相同的字节表示),例如©& # x00A5;, º。有关每种编码中包含哪些字符的详细信息,请参阅参考链接。

System.Text。ASCIIEncoding不是用于8位通信的正确编码。而是使用例如"ISO 8859-1 Latin 1;西欧(ISO)"代码页:

port.Encoding = Encoding.GetEncoding(28591);

1252和28591中的度数符号都是xB0,而不是xBF。