WCF Unicode UrlEncoded Ne vous attardez pas
Question
J'ai un service WCF RESTful qui accepte les verbes GET avec des URL codées Unicode. Les caractères Unicode sont traduits étrangement lorsque je récupère les données sur le serveur.
Y a-t-il quelque chose que je dois dire au contrat de service à faire pour que les objets Unicode UrlEncoded Gets soient traduits en belles chaînes?
Voici mon contrat:
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "/Document/{Fragment}", RequestFormat = WebMessageFormat.Xml)]
Message GetDocumentFromSearchResult(string Fragment);
Voici un exemple de l'unicode que je transmets: % FF% FE% 22% 00O% FF% FE% 20% 00King% FF% FE% 20% 00de% FF
Je reçois " King " et " of " ok, mais le reste sont peu de la ficelle sont des petits carrés.
Faut-il être un problème de décodage?
La solution
Ce que vous transmettez semble étrange: il semble contenir le format UTF-16 pour le " caractère avec les marques d'ordre sur le byte . Il s’agit presque certainement d’un problème, il s’agit donc plutôt d’un problème d’encodage de votre entrée.
Habituellement, UTF-8 est utilisé pour les URL, car cela s’intègre beaucoup mieux dans le protocole (inutile d’échapper à tous les octets NUL en ASCII pur). C’est probablement ce à quoi votre service s’attend. Il ne décode donc pas correctement (car% FF% FE n’est pas valide UTF-8).
Autres conseils
Examinez les caractères à l’aide de Fragment [i] pour connaître leur nature réelle. Cela supprimera la variable de ce que le débogueur ou une autre méthode de sortie peut vous montrer.