c# - formato - Codificación de SerialPort: ¿cómo obtengo ASCII de 8 bits?
encriptar con codigo ascii en c# (3)
Tengo un problema con un programa que se comunica a través de un puerto serie. Uno de los caracteres que debe enviar y recibir es el símbolo de grado, ASCII 0xBF. Ha funcionado bien durante años. De repente, el objeto del puerto serie ha comenzado a dejar caer el bit 7, por lo que obtengo 0x3F en lugar de 0xBF.
Estoy seguro de que esto es algo tonto que he hecho porque he jugado con mi código en esa área recientemente, sin embargo no puedo ver lo que he hecho que causa la pérdida del octavo bit.
Mi puerto se inicializa así:
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
¿Alguna idea de cómo restauro el puerto a la operación de 8 bits?
System.Text.ASCIIEncoding no es la codificación correcta para utilizar para la comunicación de 8 bits. En su lugar, utilice, por ejemplo, la página de códigos "ISO 8859-1 Latin 1; Europeo occidental (ISO)":
port.Encoding = Encoding.GetEncoding(28591);
Su problema es que ASCIIEncoding es una codificación de 7 bits. Está buscando algo que admita ASCII extendido .
A continuación, obtendrá la página de códigos 1252 .
System.Text.Encoding.GetEncoding(1252);
Esto te dará ISO 8859-1 .
System.Text.Encoding.GetEncoding(28591);
Ambos se consideran ASCII extendido y ambos contienen símbolos (la mayoría con la misma representación de bytes) típicamente asociados con este conjunto, como ©, ¥ y º. Consulte los enlaces a los que se hace referencia para obtener más información sobre qué caracteres están incluidos en cada codificación.
El símbolo de grado en 1252 y 28591 parece ser xB0, no xBF.