2008-11-04 8 views
3

Voici mon problème. J'ai un site Web dans ASP.NET/C# qui reçoit des données via GET/POSTC# HttpRequest et différents encodages

Ceci est des données "utilisateur rempli", mais pas à travers une page Web, c'est un logiciel qui contacte mon serveur.

Le problème est, ce logiciel envoie des données codées dans la norme ISO-8859-1 (donc Café serait envoyé comme Caf% E9) et le reste de ma SW/DB est Unicode

également les données complètement mutilée obtient , ce qui rend la récupération de ce qui a été envoyé impossible:/

Quelle serait la meilleure façon de faire face à cela?

J'ai essayé de définir Request.ContentEncoding (avant de lire), mais sans succès.

+0

Le logiciel définit-il le codage correct sur la demande? –

+0

Je ne pense pas, HttpRequest.ContentEncoding montre toujours UTF-8. La page .aspx contient un en-tête indiquant ISO-8859-1, cependant (à la fois en html et dans la chose asp.net) –

+0

S'il vous plaît, clarifiez votre question. "mutilé" n'est pas clair. Qu'est-ce que vous voulez réaliser? Pour obtenir les données dans une chaîne normale (Unicode)? Pour l'afficher? –

Répondre

1

% e9 est juste é mais UrlEncoded. Server.UrlDecode votre chaîne de requête.

+0

J'appelle déjà UrlDecode, ce n'est pas le problème. % e9 est 'é' dans ISO-8859-1, mais UrlDecode le convertit en chaîne UTF-8 et tout est tronqué. –

1

Regardez

How to: Select an Encoding for ASP.NET Web Page Globalization

court:

Dans le web.config écrire

<configuration> 
    <system.web> 
    <globalization 
     fileEncoding="utf-8" 
     requestEncoding="utf-8" 
     responseEncoding="utf-8" 
     culture="en-US" 
     uiCulture="de-DE" 
    /> 
    </system.web> 
</configuration> 

Supprimez les entrées de codage dans les en-têtes de ASPX.

Si utf-8 ne pas essayer correct utf-16

J'espère que cela aide.

0

Si je vous ai bien compris, vous extrayez cette information d'une requête HTTP. Je vais supposer que c'est le corps de la requête HTTP qui est dans l'encodage.

Vous pouvez utiliser System.Text.Encoding.GetEncoding (...) pour récupérer un objet de codage pour ISO-8859-1. Appelez ensuite GetDecoder() sur cet objet de codage et utilisez-le pour interpréter le corps de la requête. Idéalement, vous devez déterminer le type de codage que vous chargez à partir de Encoding.GetEncoding (...) à partir des valeurs d'en-tête dans la requête, afin que les serveurs avec des configurations différentes soient pris en charge.

1

Auteur original de la question ici.

Ce qui m'a aidé a été suggéré Georg la définition des variables Web.config, je mets

requestEncoding = "iso-8859-1"

Et tout fonctionne maintenant, merci!

3

La seule chose qui a fonctionné ici ajoutait le code suivant à web.config:

<configuration> 
    <system.web> 
    <globalization requestEncoding="iso-8859-1"/> 
    </system.web> 
</configuration> 

Et puis utilisez

Request["varName"] 

Ne pas utiliser HttpUtility.UrlDecode ou HttpUtility.UrlEncode, les 2 ne fonctionne que sur la chaîne de requête brute. Request [] fait déjà le décodage pour vous.

Merci à JamesP pour avoir publié l'idée lui-même.

+0

Héros! Ceci est obligatoire lorsque vous utilisez des formulaires PDF qui sont envoyés à une page Web. Je luttais avec ce problème toute la journée et finalement je suis tombé dessus et ça a marché! +1 – stvn

Questions connexes