2011-02-25 15 views
0

TCPソケットを使用してサーバーからクライアントにxmlシリアル化オブジェクトを送信しています。バイト配列をxml文字列に変換する際に問題があります。正しいデコーダを使用していないのかどうかはわかりませんが、バイト配列がクライアント側で受信されると、xml文字列の先頭に '?'が付きます。したがって、私のXML文字列の最初の行は、それが有効なXMLではないので、逆直列化できない?<?xml version="1.0" encoding="utf-8"?>のようになっています。.netソケット経由でXMLシリアル化オブジェクトを送信

私はUTF-8とAsciiの両方のエンコードを試みました。

いずれの入力も高く評価されます。

おかげで、

Bibek Dawadi

+0

ソケットからのデータの送受信に関連するコードを表示できますか? –

答えて

0

ASCIIは?と認識されていないバイトに置き換えられます。これが起こっている可能性があります。

あなたの質問から問題がどこにあるかは分かりません。送信と受信のコードを投稿すると役立ちます。 TCP/IP経由でXMLを送信するためのアドバイスon my blogもあります。

+0

スティーブンに感謝します。しかし、私は、XMLを直接byte []に​​かけることはできません。なぜなら、私はdelemiterを使ってメッセージフレームを実装しているからです。だから、私はオブジェクトをシリアル化して、xml文字列、接頭辞をつけてこのXML文字列の後ろに新しい文字列を持って、[]に変換してからTCP/IPソケットを介して送信します。最終的な文字列をbyte []に​​変換する際に、UTF-8エンコーディングを使用しています。また、byte []をstringに変換する際に、UTF-8エンコーディングを使用しています。 – Bikswan

1

?それはあなたがUTF8として保存したことを意味します。ほとんどの場合、UTF(UTF8?)にシリアル化されていますが、ある時点でASCIIに変換しています。私は受け取った後に推測するだろう。

stringに変換するのを避け、代わりにbyte-arrayで直接作業してください。これは問題ありません。

背景:
です。
ASCIIは7ビットのバイトだけなので、128-255の範囲のバイトはASCIIに変換するときに置き換えられます。
RFC3629:セクション6を参照BOM

+0

実際、BOMはUTF-8では3バイトなので、 '??? 'と表示されます。 –

+0

しかし、私は、delemiterを使ってメッセージフレームを実装しているので、XMLを直接byte []に​​かけることはできません。だから、私はオブジェクトをシリアル化して、xml文字列、接頭辞をつけてこのXML文字列の後ろに新しい文字列を持って、[]に変換してからTCP/IPソケットを介して送信します。最終的な文字列をbyte []に​​変換する際に、UTF-8エンコーディングを使用しています。また、byte []をstringに変換する際に、UTF-8エンコーディングを使用しています。 – Bikswan

関連する問題