Вместо использования ReadExisting
используйте метод порта Read
, чтобы получить байты, а затем преобразовать их в строку с нужной кодировкой, например:
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort port = (SerialPort)sender;
byte[] data = new byte[port.BytesToRead];
port.Read(data, 0, data.Length);
string s = Encoding.GetEncoding("Windows-1252").GetString(data);
}
Обновление: Вот более простая, по-прежнему-C # -2.0-дружественная версия, основанная на ответе Жуана. После создания экземпляра объекта SerialPort
установите его свойство Encoding
следующим образом:
port.Encoding = Encoding.GetEncoding("Windows-1252");
Тогда ваш метод DataReceived становится именно таким:
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort port = (SerialPort)sender;
string s = port.ReadExisting();
}