FTPからXMLデータを取得して、XDocumentで解析させるプログラムを作ってます。
で、MemoryStream クラスからデータを取得する箇所でへんな事が起きました。
エラーメッセージ:"'.' (16 進数値 0x00) は無効な文字です。"(最後の行の最後の文字の部分)
ソースコード:
何だ!?と思ってファイルを開いても何も問題なし。普通に読み込めます。
ためしに、ファイルをローカルにコピーしてファイルを読み込ませても問題無し…
えぇ!と思い、デバッグしてデータを虫眼鏡マークで表示させても問題があるようには見えない…
ふとマウスカーソルでツールチップが表示されたので、最後の方にカーソルを移動させると…
\0 のオンパレード…出るわ出るわ…
・・・\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
コイツが原因かっ!!!!
で、ネットをあさってみると、英語のサイトばかり(笑)
結果、下記のように修正しました。
ToArray() を使うことにより、\0 が付与される事が無くなりました。
こんなの.netのバグダロウッ!と言いたくなります。
味噌は、
ファイルの最後(改行コード)の部分でエラーが発生したとエラーメッセージが出る所です。
MemoryStream クラスで、GetBufferメソッドは使っちゃダメですっ!
ちなみに、必ずなるわけじゃなく、「なることがある」って事です。
ちなみに、こんなコード書かないでね♪
readXml.Replace("\0", string.Empty)
検索用:MemoryStream \0 無効な文字です。 GetBuffer
************** コメントへの返信 **************
遅くなりましたが返信してみたいと思います。
2013年8月16日 返信
> GetBuffer って名前なぐらいだし、その領域が実データサイズと一致してなくてもまったく不思議はないような。
> てか、ドキュメントにもしっかり書いてありますね。
> バグ呼ばわりはひどいな。
「こんなの.netのバグダロウッ!と言いたくなります。」
ドキュメントに書いてあるのも承知してます。
"言いたくなった"だけです。バグ呼ばわりしてません…
このように受け取られてしまったのは、私の文才が無いからですね。
今後気を付けます。
で、MemoryStream クラスからデータを取得する箇所でへんな事が起きました。
エラーメッセージ:"'.' (16 進数値 0x00) は無効な文字です。"(最後の行の最後の文字の部分)
ソースコード:
String readXml = Encoding.GetEncoding(932).GetString(memoryStream.GetBuffer()); result = XDocument.Parse(readXml);
何だ!?と思ってファイルを開いても何も問題なし。普通に読み込めます。
ためしに、ファイルをローカルにコピーしてファイルを読み込ませても問題無し…
えぇ!と思い、デバッグしてデータを虫眼鏡マークで表示させても問題があるようには見えない…
ふとマウスカーソルでツールチップが表示されたので、最後の方にカーソルを移動させると…
\0 のオンパレード…出るわ出るわ…
・・・\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
コイツが原因かっ!!!!
で、ネットをあさってみると、英語のサイトばかり(笑)
結果、下記のように修正しました。
String readXml = Encoding.GetEncoding(932).GetString(memoryStream.ToArray()); result = XDocument.Parse(readXml);
ToArray() を使うことにより、\0 が付与される事が無くなりました。
こんなの.netのバグダロウッ!と言いたくなります。
味噌は、
ファイルの最後(改行コード)の部分でエラーが発生したとエラーメッセージが出る所です。
MemoryStream クラスで、GetBufferメソッドは使っちゃダメですっ!
ちなみに、必ずなるわけじゃなく、「なることがある」って事です。
ちなみに、こんなコード書かないでね♪
readXml.Replace("\0", string.Empty)
検索用:MemoryStream \0 無効な文字です。 GetBuffer
************** コメントへの返信 **************
遅くなりましたが返信してみたいと思います。
2013年8月16日 返信
> GetBuffer って名前なぐらいだし、その領域が実データサイズと一致してなくてもまったく不思議はないような。
> てか、ドキュメントにもしっかり書いてありますね。
> バグ呼ばわりはひどいな。
「こんなの.netのバグダロウッ!と言いたくなります。」
ドキュメントに書いてあるのも承知してます。
"言いたくなった"だけです。バグ呼ばわりしてません…
このように受け取られてしまったのは、私の文才が無いからですね。
今後気を付けます。
てか、ドキュメントにもしっかり書いてありますね。
バグ呼ばわりはひどいな。