GPS を搭載した Mio P550 デバイスを持っています。SerialPort.Read() を使用するだけで、SerialPort を使用して NMEA センテンスを取得しようとしています。データは奇妙なエンコーディングで返されます。GPS は NMEA センテンスを ASCII で返す必要がありますが、そうではありません。読むための私のコードは次のとおりです。
dataLength = this.serialPort.Read(buffor, 0, Gps.BUFFOR_LENGTH);
Debug.WriteLine("data length: " + dataLength);
if (dataLength > 0)
{
for (int i = 0; i < dataLength; i++)
{
char c = Convert.ToChar(buffor[i]);
if (c == '\r' || c == '\n')
{
string data = stringBuilder.ToString();
Debug.WriteLine("data readed: " + data);
if (data.StartsWith("$GPGGA"))
{
this.OnLocationChanged(data);
}
stringBuilder.Length = 0;
}
else
{
stringBuilder.Append(c);
}
Debug.WriteLine("readed data: " + stringBuilder.ToString());
}
そして、これが私が返すサンプル値です: xæææxfæ`æxæføøøxxxøx
ASCII で NMEA 文を返す 2 つ目のデバイス (Asus A636N) もあり、私のコードはうまく機能します。
NMEA センテンスを ASCII で取得するには、Mio デバイスをどうする必要がありますか? または、デバイスから返されたデータのエンコードを取得するにはどうすればよいですか? System.Text.Encoding.xxx.GetString() のすべてのクラスを使用して、読み取ったバイトから文字列を取得しようとしましたが、正しいデータが返されません。上記のサンプルと同様のデータが返されます。