Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/07/2011, 17h47   #1
Membre à l'essai
 
Inscription : mai 2006
Messages : 64
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 64
Points : 20
Points : 20
Par défaut Problème migration iso-8859-1 vers utf-8

Bonjour,

J'ai un site web en ASP classique et je désire maintenant pouvoir afficher le site web en Chinois. Pour ce faire, je dois tout changer l'encodage des pages pour utf-8 plutôt que l'iso-8859-1 qui est actuellement utilisé.

Mon problème est le suivant, lorsque l'internaute lance une page, le site web fait des requêtes http à un autre serveur distant (application en ASP classique aussi) en utilisant un objet winhttprequest en utilisant le type MIME application/x-www-form-urlencoded.
Depuis que j'ai modifié l'encodage de mes pages, le serveur distant qui reçoit les requêtes envoyées par le serveur web n'enregistre plus les caractères accentués correctement car Server.URLEncode("é") donnait "%9E" quand le site web était iso-8859-1, mais maintenant ça donne "%C3%A9" ce qui fait que sur le serveur distant, il décode en "é" au lieu de "é".

Y aurait-il moyen d'indiquer au serveur distant que ma requête est encodée en utf-8 et qu'il doit donc décoder utf-8 ? J'ai essayé de mettre le header ci-dessous mais ça n'y change rien:
Code :
httpReq.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
Si possible il serait préférable que l'administrateur du serveur distant n'ait pas à mettre à jour son application.

La question fondamentale de ce problème est, comment indique-t-on à un serveur en quel charset est fait la requête ? Le client (exemple un navigateur) détecte bien automatiquement le charset de la réponse du serveur, alors pourquoi pas l'inverse ?

Merci d'avance !
Loki13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 21h32   #2
Modérateur
 
Avatar de kaiser59
 
Inscription : novembre 2005
Messages : 1 246
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2005
Messages : 1 246
Points : 1 203
Points : 1 203
Envoyer un message via MSN à kaiser59
Salut,

Pour un site chinois l'utf-8 ne correspond pas... Utf-8 c'est pour les caractères latin mais sans les accents, si tu regardes les sites chinois par exemple chinatv tu verras qu'ils utilisent le charset suivant :
Code html :
text/html; charset=gb2312
tout comme pour le japonais qui correspond à
Code html :
text/html; charset=Shift_JIS
__________________
Ne dites pas Java pour dire Javascript ! Ces deux codes n'ont rien à voir ! // Essayez d'expliquer, de la façon la plus claire possible votre problème. // Parfois une image vaut mieux qu'un long discours

FAQ ASP
kaiser59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 21h59   #3
Membre à l'essai
 
Inscription : mai 2006
Messages : 64
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 64
Points : 20
Points : 20
Désolé mais je ne suis pas d'accord avec ça, utf-8 supporte les caractères de toutes les langues et c'est devenu le standard pour les sites web. De toute façon le problème ne réside pas dans le choix du charset.
Loki13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 13h46   #4
Modérateur
 
Avatar de kaiser59
 
Inscription : novembre 2005
Messages : 1 246
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2005
Messages : 1 246
Points : 1 203
Points : 1 203
Envoyer un message via MSN à kaiser59
Soit, mais je ne comprend pas trop,

Citation:
J'ai un site web en ASP classique et je désire maintenant pouvoir afficher le site web en Chinois. Pour ce faire, je dois tout changer l'encodage des pages pour utf-8 plutôt que l'iso-8859-1 qui est actuellement utilisé.


si tu veux afficher ton site en chinois en principe, on ajoute un dossier (ou sous-domaine) qui reprend le site mais écrit dans la langue étrangère...
__________________
Ne dites pas Java pour dire Javascript ! Ces deux codes n'ont rien à voir ! // Essayez d'expliquer, de la façon la plus claire possible votre problème. // Parfois une image vaut mieux qu'un long discours

FAQ ASP
kaiser59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 14h26   #5
Membre Expert
 
Avatar de kdmbella
 
Homme Demazy Mbella
Développeur Web
Inscription : août 2010
Messages : 620
Détails du profil
Informations personnelles :
Nom : Homme Demazy Mbella
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2010
Messages : 620
Points : 1 470
Points : 1 470
Citation:
Envoyé par kaiser59 Voir le message
Soit, mais je ne comprend pas trop,





si tu veux afficher ton site en chinois en principe, on ajoute un dossier (ou sous-domaine) qui reprend le site mais écrit dans la langue étrangère...

cette méthode est trop fastidieuse cella revient a developper 3 fois le meme site si l'on veux 3 langue or chaque language propose des solutions comme stockée les données dasn plusieurs langues et garder le meme site et ainsi en fonction de la langue le site ira chercher l'information correspondante ou alors l'usage des fichiers ressources pour chaque langue (cas de asp.net)
kdmbella est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 19h24   #6
Membre à l'essai
 
Inscription : mai 2006
Messages : 64
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 64
Points : 20
Points : 20
Ok je reformule:
j'ai une application asp (client) dont les pages sont encodées en utf-8 qui envoi une requête avec winhttp à une autre application asp (serveur) dont les pages sont encodées différement (windows-1252 ou iso-8859-1 par exemple)

Comment faire pour que l'application appelée décode les paramètres envoyés en post de la bonne façon ? On doit bien pouvoir indiquer au serveur en quel encodage la requête est effectuée non ?
Loki13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 09h08   #7
Membre habitué
 
Avatar de tsunamichups
 
Inscription : octobre 2009
Messages : 161
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 161
Points : 140
Points : 140
Au risque de dire une bêtise, vu que tu récupérer tes info par ton script asp, est ce que en modifiant la valeur de ton CODEPAGE cela ne résoudrait pas ton soucis ?
(Le code page de l'appli que reçois le code)

Code :
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
tsunamichups est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 15h55   #8
Membre à l'essai
 
Inscription : mai 2006
Messages : 64
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 64
Points : 20
Points : 20
Citation:
Envoyé par tsunamichups Voir le message
Au risque de dire une bêtise, vu que tu récupérer tes info par ton script asp, est ce que en modifiant la valeur de ton CODEPAGE cela ne résoudrait pas ton soucis ?
(Le code page de l'appli que reçois le code)

Code :
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
Oui, ça fonctionnerait, c'est en fait la solution permanente que je vais utiliser. Le problème c'est que "l'application qui reçois la requête" se trouve en fait sur une cinquantaine de serveurs différents répartis dans le monde. Il faudrait alors mettre à jour tous les serveurs en même temps et c'est très compliqué voir impossible.

C'est pour ça que je cherche solution temporaire qui va permette de mettre le site web à jour, et par la suite mettre les serveurs distants à jour graduellement.

Évidemment, j'accepte que les caractères non latin ne puissent pas être traités par les serveurs distants qui n'auront pas encore été mis à jour, mais je voudrais qu'ils puissent au moins continuer à traiter les caractères latins malgré le fait que le site web a changé d'encodage.

La meilleure solution que j'ai trouvé jusqu'à maintenant est de convertir les string utf-8 du site web en ANSI avant d'envoyer au serveur distant qui n'est pas encore mis à jour. Toutefois je n'ai pas encore réussi à faire fonctionner correctement.
Loki13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 19h27   #9
Membre à l'essai
 
Inscription : mai 2006
Messages : 64
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 64
Points : 20
Points : 20
Toute mes tentatives de ré-encoder la string en latin-1 avant d'envoyer à l'application distante n'ont pas fonctionné. J'ai néamoins trouvé la solution, il suffit que je change le code page avant d'url encoder les paramètres de la requête puis que je le remette à ce qu'il était après

Code :
1
2
3
4
5
6
 
Session.CodePage = "1252"
[Url encodage des paramètre de la requête]
Session.CodePage = "65001"
 
winhttpreq.send data
Je trouve ça un peu bête de changer tout le code page de la session, mais c'est la seule chose qui fonctionne jusqu'ici, en espérant que ça ne me cause pas d'autres problèmes...
Loki13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 09h24   #10
Modérateur
 
Avatar de kaiser59
 
Inscription : novembre 2005
Messages : 1 246
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : novembre 2005
Messages : 1 246
Points : 1 203
Points : 1 203
Envoyer un message via MSN à kaiser59
Citation:
Envoyé par kdmbella Voir le message
cette méthode est trop fastidieuse cella revient a developper 3 fois le meme site si l'on veux 3 langue or chaque language propose des solutions comme stockée les données dasn plusieurs langues et garder le meme site et ainsi en fonction de la langue le site ira chercher l'information correspondante ou alors l'usage des fichiers ressources pour chaque langue (cas de asp.net)
Le fait de changer l'encodage ne fait pas une traduction du site mais juste une retranscription ?? Je doute que les chinois comprenne le mot "voiture" retranscrit et non traduit ^^
__________________
Ne dites pas Java pour dire Javascript ! Ces deux codes n'ont rien à voir ! // Essayez d'expliquer, de la façon la plus claire possible votre problème. // Parfois une image vaut mieux qu'un long discours

FAQ ASP
kaiser59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h56.


 
 
 
 
Partenaires

Hébergement Web