UTF8でXMLを出力する際に必ずBOM無しにする
.NETクライアントからXMLをサーバ上のTomcatに送信するためには、Javaと互換性を保つためUTF8で出力する場合はいつもBOM無しにしなくちゃならない。
例えば、引数にストリームと対象のエンコーディングを指定することでXMLをストリームに書き出すメソッドがあったとすると
public void WriteXML(Stream stream, Encoding encoding) { : : //UTF8の場合、BOM無しを使う XmlTextWriter wr = ( encoding is UTF8Encoding ) ? new XmlTextWriter(new BufferedStream(stream), new UTF8Encoding(false)) : new XmlTextWriter(new BufferedStream(stream), encoding); : : }
とUTF8の場合は決め打ちでBOM無しのUTF8に挿げ替える必要があるわけだ。
出力はこれで良いはずだが、はて、入力はどうするんだろう。XmlReaderはエンコーディングの指定は無いんだが、内部で勝手にBOMの有無を判定しているのだろうか。
追記:
>XmlReaderはエンコーディングの指定は無いんだが、内部で勝手にBOMの有無を判定しているのだろうか。
ソースが無いのでなんともいえないが、これは恐らく'Yes'だと思う。XmlReaderの実装クラスのコンストラクタ、又は初期化処理中にストリームを先読みしてエンコーディングを検出していると思われる。