私はweihstephenサーバーの実装を打ち破っています。商用テストクライアントの解析に問題があります。 XML文書の宣言を特定のエンコーディングにする必要があるかどうか疑問に思っています。XML宣言は特定のエンコーディングにする必要がありますか?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
奇妙なことは、以前の開発者が、私は彼がUnicode/UTF-16エンコーディングでなく、生成コードに目指していますと仮定している各文字にゼロをインターリーブTCPソケットにXMLを書いていますUTF-8に設定されています。
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
...
packetData[2 * i + 0] = data[i];
packetData[2 * i + 1] = 0;
その後、バイト配列のパケットデータが送信されます。
dataOutputStream.write(packetData);
dataOutputStream.flush();
はそれほどのwiresharkで、出力ファイルは次のようになります。
.<.?.x.m.l. .v.e.r.s.i.o.n.=.".1...0.". .e.n.c.o.d.i.n.g.=.".U.T.F.-.8.". .s.t.a.n.d.a.l.o.n.e.=.".n.o.".?.>
私は上記が有効で、宣言がUTF-8などの特定のエンコーディングである必要があり、XMLドキュメントの残りの部分がxml宣言で指定されたエンコーディングかxml宣言である必要があるかどうかは疑問です宣言で指定されたエンコーディング
UTF-16は各文字にゼロを追加するだけではありません。私はそれがその開発者だけによって導入されたバグだと思う。 – Alex
私は、開発者が意図的に16バイトのデータ内容全体を保持したいと思う。 xmlにはおそらく16ビットのデータがあり、データの内容全体を1つの形式で保持したいと考えていました。開発者が暗号化しようとする可能性があり、アライメントが重要だったり、誰かが解読をハックしたり、スペースを追加することでハッキングするのが難しくなったりします。ハッカーは文字列?xmlを探していて見つからないでしょう。 – jdweng
ドキュメントのエンコードに関係なく、XML処理のすべての文字は、Unicode文字セットのものです。いくつかのUnicode文字を除くすべての文字は許可されているため、それを処理できないプロセッサであれば、その非準拠の制限をよく知らなければなりません。ドキュメントエンコーディング宣言とファイルまたはストリームの実際のエンコーディングに関して、XMLライブラリは両方を同時に処理します。あなたが継承したコードは、仕事を正しく行うための十分な知識をまだ持っていない人が書いたものです。私はそれが共通のライブラリに置き換えられると思うだろう。 –