4

Android アプリから WCF サービスへの一部の要求で、次のエラーが発生します。

System.Runtime.Serialization.SerializationException: xxx.SaveChangesCommand 型のオブジェクトの逆シリアル化中にエラーが発生しました。'rg'rden' に無効な UTF8 バイトが含まれています。---> System.Xml.XmlException: '.rg.rden' に無効な UTF8 バイトが含まれています。---> System.Text.DecoderFallbackException: インデックス 0 のバイト [E6] を指定されたコード ページから Unicode に変換できません。

System.Text.DecoderExceptionFallbackBuffer.Throw(Byte[] bytesUnknown、Int32 インデックス) で System.Text.DecoderExceptionFallbackBuffer.Fallback(Byte[] bytesUnknown、Int32 インデックス) で System.Text.DecoderFallbackBuffer.InternalFallback(Byte[] バイト、Byte* pBytes, Char*& chars) System.Text.UTF8Encoding.FallbackInvalidByteSequence(Byte*& pSrc, Int32 ch, DecoderFallbackBuffer fallback, Char*& pTarget) で System.Text.UTF8Encoding.GetChars(Byte* bytes, Int32 byteCount, Char*) System.Text.UTF8Encoding.GetChars(Byte[] bytes, Int32 byteIndex, Int32 byteCount, Char[] chars, Int32 charIndex) の System.Xml.XmlConverter.ToChars(Byte[] buffer, Int32 オフセット、Int32 カウント、Char[] 文字、Int32 charOffset)

--- End of inner exception

スタック トレース --- System.Xml.XmlConverter.ToChars(Byte[] バッファ、Int32 オフセット、Int32 カウント、Char[] chars、Int32 charOffset) で System.Xml.XmlBufferReader.GetChars(Int32 オフセット、Int32 長さ、Char[ ] chars) の System.Xml.XmlBufferReader.GetString(Int32 オフセット、Int32 の長さ) の System.Xml.ValueHandle.GetString() の System.Xml.XmlBaseReader.ReadContentAsString() の System.Xml.XmlBaseReader.ReadElementContentAsString() の ReadArrayOfstringFromJson (XmlReaderDelegator 、 XmlObjectSerializerReadContextComplexJson 、 XmlDictionaryString 、 XmlDictionaryString 、 CollectionDataContract ) System.Runtime.Serialization.Json.JsonCollectionDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader、XmlObjectSerializerReadContextComplexJson コンテキスト) で System.Runtime.Serialization.Json.JsonDataContract.ReadJsonValue (XmlReaderDelegator jsonReader、XmlObjectSerializerReadContextComplexJson コンテキスト) System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize (XmlReaderDelegator リーダー、文字列名、文字列 ns、型の、RuntimeTypeHandle 宣言された TypeHandle、文字列名、文字列 ns) での ReadSaveShoppingListChangesCommandFromJson(XmlReaderDelegator 、XmlObjectSerializerReadContextComplexJson 、XmlDictionaryString 、XmlDictionaryString[] ) で System.Runtime.Serialization.Json.JsonClassDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader、XmlObjectSerializerReadComplexJsonContextJson でのコンテキスト Json.) .JsonDataContract.ReadJsonValue (XmlReaderDelegator jsonReader、XmlObjectSerializerReadContextComplexJson コンテキスト) System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize (XmlReaderDelegator リーダー、文字列名、文字列 ns、型のSystem.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader、Boolean verifyObjectName) の System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader、Boolean verifyObjectName、DataContractResolver dataContractResolver) の型。 )System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator リーダー、文字列名、文字列 ns、型の、DataContract dataContract、文字列名、文字列 ns) System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader、Boolean verifyObjectName) で System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver)System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator リーダー、文字列名、文字列 ns、型の、DataContract dataContract、文字列名、文字列 ns) System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader、Boolean verifyObjectName) で System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver)System.Runtime.Serialization.XmlObjectSerializerReadContextComplexJson コンテキスト) で System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator リーダー、文字列名、文字列 ns、型のname, String ns) System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName) at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)System.Runtime.Serialization.XmlObjectSerializerReadContextComplexJson コンテキスト) で System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator リーダー、文字列名、文字列 ns、型のname, String ns) System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName) at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator リーダー、文字列名、文字列 ns、型のSystem.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver) での Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader、ブール値の verifyObjectName)XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator リーダー、文字列名、文字列 ns、型のSystem.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver) での Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader、ブール値の verifyObjectName)System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader、Boolean verifyObjectName) で System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver)System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader、Boolean verifyObjectName) で System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver)XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver)XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver)

--- 内部例外スタック トレースの終了 ---
System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (XmlReaderDelegator リーダー、ブール値の verifyObjectName、DataContractResolver dataContractResolver) で System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject (XmlDictionaryReader リーダー、ブール値の verifyObjectName) で System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest (メッセージ メッセージ、Object[] パラメーター) System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest (メッセージ メッセージ、Object[] パラメーター) System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest (メッセージ メッセージ、Object[] パラメーター) System.ServiceModel System.ServiceModel の .Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)。System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) の Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) の System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) )

私はいくつかの同様のケースを探していましたが、このリンクを見つけました:
.NET WCF UTF-8 デシリアライザーを構成して、例外をスローする代わりに非最短形式の文字を変更/破棄しますか?
最短ではない形式を使用した UTF-8 のエラーを修正する可能性があります。

しかし、ここに記載されているように、この修正が必要な理由がわかりません

新しい UTF-8 文字セットの実装は、JDK7、Open JDK 6、JDK 6 update 11 以降、JDK5.0u17、および 1.4.2_19 に統合されています。

リクエストを見ると、次のように表示されます。

HTTP_USER_AGENT:Apache-HttpClient/UNAVAILABLE ( java 1.4 )

ただし、Android アプリはjdk1.7.0_13でコンパイルされています

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

XML は完全に UTF-8 形式ではないと思います。「rgården」の種類のテキストは、UTF-8 とは別の形式である可能性があります。ISO 8859-1 か何かのように。

したがって、テキストを UTF-8 でエンコードしてみてください。うまくいくかもしれません:)

于 2015-10-09T19:38:06.753 に答える