最近使用した Web サービスから受け取ったテキストに問題がありました。Web サービスは XML を送り返しますが、これは問題ありませんが、一部の XML の途中で ASCII 制御文字を取得しています。この投稿に例を貼り付けたかったのですが、無効な文字であるため、このテキストエリアに貼り付けることさえできません。
これらの場合に何をすべきかを調査するのに時間を費やしたところ、有益な記事http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/を見つけました。関連するこの記事からの引用は次のとおりです。
これらは、XML データに関係する文字ではありません。彼らは削除されるべき違法な文字です...
そのため、この記事のアドバイスに従って、このサービスから生の出力を取得し、制御文字 (スペース、タブ、cr、または lf ではない) であるすべての文字を削除するコードをいくつか書きました。
そのコードは次のとおりです。
System.Net.WebClient client = new System.Net.WebClient();
byte[] invalidCharacters = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0xB,
0xC, 0xE, 0xF, 0x10, 0x11, 0x12, 0x14, 0x15, 0x16,
0x17, 0x18, 0x1A, 0x1B, 0x1E, 0x1F, 0x7F };
byte[] sanitizedResponse = (from a in client.DownloadData(url)
where !invalidCharacters.Contains(a)
select a).ToArray();
result = System.Text.UTF8Encoding.UTF8.GetString(sanitizedResponse);
しかし、これは私に考えさせました。2 バイト文字を受け取った場合、返されたデータを台無しにすることはありますか? コードページによっては、1 バイトまたは 2 バイトの ASCII 制御文字で構成される 2 バイト文字を使用することは有効ですか? これらの文字が XML データにあると「何の役にも立たない」という記事は最終的なものに聞こえますが、セカンド オピニオンが必要です。
フィードバックをお待ちしております