System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Considerando interesante y curiosa la cuestión planteada por Favi, me complace compartir con vosotros la resolución.

---- Pregunta --------------------------------

Estoy actualizando un programa hecho en vb versión 3 que utiliza un control ‘mscomm’ de 16 bits. Ahora en net lo he transformado utilizando ‘System.IO.Ports.serialport’.

El problema en concreto es, que los caracteres que recibo del buffer se me quedan el más alto al transformarlo a hexadecimal en 3F cuando en la versión vb3 en la misma lectura me indica 8D.

Es decir como si el juego de caracteres interno del objeto ‘serialport’ fuera menor que el juego de caracteres del control ‘mscomm’ de la versión vb 3. Con el control ‘mscomm’ de vb3 se pueden leer caracteres que llegarían 255 decimal FF hexadecimal pero con el ‘serialport’ de net los deja capados en 3F no me interpreta caracteres de valor superior.

No si puede ser, que no utiliza un juego de caracteres extendido o algo así ?
Utilizo el ‘serialport.readexisting’ para recuperar las cadenas

---- Respuesta J  --------------------------------

SerialPort1.Encoding = System.Text.Encoding.Default

 

Por defecto y supongo que aunque discutible la decodificación de los bytes recibidos se realiza utilizando la primera pagina de la tabla de caracteres ASCII, suponiendo que si se utilizan 8 bits para los datos, deberíamos utilizar ambas. Para poder representar el juego de caracteres de ambas paginas deberemos asignar ‘Encoding.Default’ al encoding de nuestro puerto serie.

No dudéis en continuar esta conversión si la consideráis interesante.
Pep LLuis

Published Wed, Oct 15 2008 10:34 by peplluis
Filed under:

Comments

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Wednesday, October 15, 2008 5:27 AM by favi

Ok, peplluis.

El error queda solucionado, ahora si los caracteres que recibo del buffer son los correctos.

Pues mira, que le habia dado vueltas al seriaport.encoding, pasandole las constantes que el intellisense me proporcionaba. ASCIIencoding, UTF8ENCODING, UNICODEencoding.. y nada de nada error persistia.

muchas gracia o moltes gràcies.

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Wednesday, December 03, 2008 11:18 AM by Lorena

Hola Pep luis, ahora haciendole asi:

Puerto.Enconding = System.Text.Encoding

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Wednesday, December 03, 2008 11:37 AM by Lorena

Hola Pep Luis soy lorena,

Sabes implemente lo de asignar ‘Encoding.Default’ al encoding de nuestro puerto serie.

pero ahora en ves de ponerme el ?, me pone un caracter como cuadrito un cuadrito muy pequeño que en ascii es el 176 .

Gracias.

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Thursday, December 04, 2008 10:08 AM by peplluis

Hola Lorena,

Si te parece puedes contactar conmigo utilizando la opcion 'contact' en [This BLOG] al inicio de la pagina.

Cuentame el con el codigo que estas usando y vemos cual es el problema.

Saludos,

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Monday, March 30, 2009 10:06 AM by Luis Miguel Ballestas

You also have to keep in mind to set the same baud rate you have on your gps hardware port  configuration and establish the automatic gps management.

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Saturday, July 04, 2009 2:42 PM by Mariano

Hola muy interesante, quiero compartir un problema que realmente nose como soluionarlo y me tiene atrapado, el tema es que estoy codificando la comunicacion por serial port en c# con una impresora hasar 320F, la impresora entiende Ascii Estandar no el extendido y para los comando que superan el hexadecimal 7F, o sea, los comando del reango 80H a FFH me los pide que los enbie en Ascii HExadecimal, probe de todas formas y no me los interpreta alguna solucion mil graciass.... Saludos.

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Monday, July 06, 2009 2:08 AM by peplluis

Hola Mariano,

Prueba con esta...

this.serialPort1.Encoding=System.Text.Encoding.GetEncoding("iso-8859-1");

Espero tus noticias,

Pep Lluis,

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Wednesday, November 18, 2009 7:43 PM by Sergio

Hola Pep Lluis,

Yo tenía el mismo problema para transmitir datos a través del puerto serie, me ha funcionado a medias tu recomendacion:

this.serialPort1.Encoding=System.Text.Encoding.GetEncoding("iso-8859-1")

Ahora ya no me salen símbolos de interrogación en las vocales acentuadas, pero curiosamente sólo la vocal 'e' se transmite acentuada, el acento desaparece de las restantes vocales. Por ejemplo, si envío por el puerto:

á é í ó ú

Se recibe en el dispositivo:

a é i o u

Ya intenté con distintos mapas (UTF-8, UTF-16, ASCII) y nada que no funciona.

¿Tienes alguna recomendación?

Saludos,

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Friday, November 27, 2009 9:49 AM by peplluis

Hola Sergio... mas que recomendacion, deberias verificar utilizando algunos de los ejemplos mios como el "DeCom1ACom3" para verificar que realmente estas enviando el caracter que presupones (pues quizas estas utilizando algun tipo de conversion o adaptacion que lo hace trabajar mal), en todo contacta directamente conmigo y lo hablamos en off.

Saludos,

Pep Lluis,

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Tuesday, December 29, 2009 3:58 PM by Sergio

ok, Pep Lluis, déjame darle una ojeada, gracias y feliz año !

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Friday, January 13, 2012 1:57 AM by IMASDPIC

SerialPort1.Encoding = System.Text.Encoding.Default

Hola que tal yo tengo el mismo problema cuando el byte que recibo excede de F ya me muestra 3F

exactamente donde hay que poner el codigo este que describes al principio de pagina ?deberian hacer un buen manual completo del puerto serie porque a mi parecer para el que quiere empezar esta batante liado y mas si vienes del vb6

un saludo PepLluis y gracias por tu web

# re: System.IO.Ports.SerialPort – Conversiones y Codificaciones.

Friday, January 13, 2012 2:31 AM by peplluis

Hola IMASDPIC,

Bienvenido y gracias por leer mi Blog. Como ya sabras los blogs son herramientas que nos permiten compartir nuestro dia a dia con el resto de la comunidad. Como MVP dedico tanto tiempo como puedo ayudando a personas como tu de forma desinteresa y sin animo de lucro. Comprenderas que es imposible a traves del blog dedicar un manual que cubra las inquietudes de cada uno de los lectores. En ese sentido te aconsejo que visites los foros de MSDN como herramienta de postear preguntas y recibir respuestas. En cuanto al manual la misma MSDN dispone de una completa documentacion describiendo el uso de los puertos serie : www.msdn.com

En tu caso concreto deberias utilizar el mismo juego que este utilizando el DCE o DTE ...

       SerialPort1.Encoding = System.Text.Encoding.ASCII

       SerialPort1.Encoding = System.Text.Encoding.UTF7

       SerialPort1.Encoding = System.Text.Encoding.UTF8

       SerialPort1.Encoding = System.Text.Encoding.UTF32

Saludos,

PepLluis,

Leave a Comment

(required) 
(required) 
(optional)
(required) 
If you can't read this number refresh your screen
Enter the numbers above: