.NET Micro Frameworkでの文字列エンコードとデコード

ネットワークで接続されたサービスやデバイスとHTTP等で送受信する場合、必ず出てくるのが、文字列のUTF8エンコーディングとデコーディングです。HTTPで文字列データを送信する時には、UTF8でバイト列にエンコードして送付し、バイトデータを受信した時には、文字列にデコードする処理がよく登場します。

.NET Micro Frameworkでは、System.Text名前空間にEncodingというクラスが用意されていて、このクラスを使ってエンコード、デコードを行います。

先ず、エンコードですが、変換したい文字列がstring型のtextという変数に格納しているとして、

byte[] bytes = System.Text.Encodeing.UTF8.GetBytes(text);

とコーディングしてやれば、bytes変数にUTF8でエンコードされた文字列が格納され、そのままHTTPのPUTやGETのデータ送信用として使えます。

次に、デコードですが、変換したいUTF8でエンコーディング済みのバイト列がbytes[]型の変数bytesに格納されているとして、

char[] chars = System.Text.Encodeing.UTF8.GetChars(bytes);

で、char配列に変換された文字列データが得られ、

string text = new string(chars);

で、文字列にデコードが可能です。@IT Monoistの記事、https://monoist.atmarkit.co.jp/mn/articles/1111/08/news002.html の2ページ目のリスト3の一行目は、正にこの機能を使って、string型のテキストをUTF8エンコーディングしたバイト列に変換しています。この記事では、Socketを介した通信を紹介していますが、文字列の送受信の際にはstring型のテキストをUTF8エンコーディングしたバイト列に変換して送信をしているわけです。

ちなみに、UTF8のGetBytes()メソッドはずっと昔のバージョンから、GetChars()メソッドは、4.1から登場したメソッドですのでご注意ください。

残念ながらまだ2011/11/9時点で、最新版の4.2の正式リリース版が出ていませんが(現在RC版)、@IT Monoist の記事 https://monoist.atmarkit.co.jp/mn/articles/1109/26/news005.html に書いたように、ネットワーク系やセキュリティ系が大幅に強化されていて、関連するクラスやメンバーの構成が変わっているので、一つ前のポストで紹介したヘルプで、どうなったかを確認してみるのも面白いでしょう。この記事では詳細に触れられなかった正規表現を扱うクラスも追加されているので、お試しください。