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