.NETのSerialPortクラスで日本語が取得できない件
シリアルポートに接続された機械をコントロールするのに、最近使い始めたVisual C#でSerialPortクラスを使って通信を試みていたけれど、半角カナや漢字が"????"と変換されてしまい読み取れなかった。
受信データをアウトプットしたテキストボックスが悪いのか、途中のchar→string変換が悪いのか、受信バッファからの読み出しが悪いのかと調べていくと、受信バッファから文字を取り出した時点で"?"になっていることがわかった。
散々悩んだあとでEncodingが悪いということがわかって、
serialPort1.Encoding = Encoding.GetEncoding("Shift_JIS");
とするとうまくいった。
できたあとで、「.NET Framework 2.0 コア機能解説 ~ 第 2 回 シリアルポートのサポート ~ 」に書いてあるのを発見した。
生データをそのまま出してくれる方がうれしいと思うのはもう古い考えなのかな・・・。