SerialPort encodage - comment puis-je obtenir 8 bits ASCII?
Je vais avoir un problème avec un programme qui communique via un port série. L'un des personnages, il devra envoyer et de recevoir est le degré symbole ASCII 0xBF. C'est très bien marché pendant des années, maintenant, tout à coup le port série de l'objet a commencé à tomber bit 7, donc je me 0x3F au lieu de 0xBF.
Je suis certain que c'est quelque chose de stupide, je l'ai fait parce que j'ai bricolé avec mon code dans la zone recenlty - cependant je ne vois pas ce que j'ai fait qui provoque la perte de 8 bits.
Mon port est initialisé comme ceci:
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
Des idées comment je restaurer le port de 8 bits?
Vous devez vous connecter pour publier un commentaire.
Votre problème, c'est que ASCIIEncoding est un 7 bits de codage. Vous êtes à la recherche de quelque chose qui prend en charge ASCII étendu.
Suivantes, vous obtiendrez Page de codes 1252.
Cela vous aidera à ISO 8859-1.
Ces deux sont considérés comme des ASCII étendu et contiennent des symboles (le plus souvent avec la même représentation en octets) généralement associé avec ce jeu, comme l' © , ¥ , et de º . Voir le référencés liens pour plus d'informations sur les caractères qui sont inclus dans chaque encodage.
Système.Texte.ASCIIEncoding n'est pas le bon encodage à utiliser pour les 8-bits de la communication. Au lieu d'utiliser par exemple le "ISO 8859-1 Latin 1; europe Occidentale (ISO)" page de code:
Le degré de symbole dans les deux 1252 et 28591 semble être xB0, pas xBF.