2009-09-27 6 views
0

J'utilise google app engine pour créer un site Web et j'ai des problèmes avec les caractères spéciaux. Je pense avoir réduit le problème à ces deux exemples de code:Ñ n'apparaît pas dans le moteur de recherche google site

request = urlfetch.fetch(
     url=self.WWW_INFO, 
    payload=urllib.urlencode(inputs), 
    method=urlfetch.POST, 
    headers={'Content-Type': 'application/x-www-form-urlencoded'}) 
print request.content 

Le code précédent affiche le contenu très bien, montrant les caractères spéciaux. Mais, la bonne façon d'utiliser le cadre pour afficher quelque chose utilise:

request = urlfetch.fetch(
     url=self.WWW_INFO, 
    payload=urllib.urlencode(inputs), 
    method=urlfetch.POST, 
    headers={'Content-Type': 'application/x-www-form-urlencoded'}) 
self.response.out.write(request.content) 

Ce qui ne présente pas les caractères spéciaux, et au lieu seulement des impressions. Que dois-je faire pour qu'il s'affiche correctement? Je sais qu'il me manque quelque chose, mais je n'arrive pas à comprendre ce que c'est. Le site Web définit le <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">, et j'ai essayé avec charset=UTF-8 sans succès.

J'apprécierai tous les conseils qui peuvent me diriger dans la bonne direction.

Répondre

1

Vous devez obtenir le charset du dans le résultat de d'extraction en-tête content-type, l'utiliser pour décoder les octets en Unicode, puis, sur la réponse, définissez l'en-tête avec l'encodage préféré (je suggère utf-8 - pas de bonne raison de faire autrement) et d'émettre le codage du texte Unicode via ce codec. Le passage à unicode n'est pas strictement nécessaire (quand vous ne faites rien du contenu, juste en le renvoyant à la réponse, vous pouvez utiliser un type de contenu et un jeu de caractères identiques à ceux que vous avez reçus) mais c'est recommandé (utilisez des chaînes octets encodées uniquement en entrée/sortie, gardez toujours tout le texte "dans" votre application comme unicode). IOW, votre problème semble être principalement que vous ne définissez pas correctement les en-têtes sur la réponse.

+0

J'ai vérifié avec firebug, et il semble que le moteur d'application définit automatiquement l'en-tête de type de contenu à utf-8. –

+0

C'est la valeur par défaut, oui - mais vous pouvez le régler sur autre chose si vous le souhaitez. –

+1

L'a corrigé. Ce que je recevais était une chaîne codée ISO-8859-1, donc j'ai dû faire unicode (request.content, 'iso-8859-1') pour le convertir correctement en unicode avant de l'imprimer. –

Questions connexes