win32com

Le
JB
Salut a tous,

Petit souci sous Win2003, Py2.4, win32com r212.

Je fais souvent du python dans des pages ASP. Ca marche très bien, mais
la sur cette (nouvelle) config j'ai un souci d'encodage :

<%@Language="Python"%>
<%
Response.Write("hého €") <- reponse illisible (hého € !)
Response.Write("<br>")
Response.Write(u"hého €") <- reponse parfaite
%>

Or en ASP classique, Response.Write("hého €") marche très bien.

Et, en build 202 avec Python 2.2 je n'avais pas ce problème non plus

Vu que j'ai deja une grosse appli en prod qui ne spécifie pas le 'u'
pour encoder les chaines, y a t il un moyen de revenir au comportement
antérieur ou de overrider Response.Write ?

J'essaie de créer une fonction custom que j'affecte à Response.Write :

rep = Response
def MyResponse(instr):
rep.Write(unicode(instr))
Response.Write = MyResponse

mais j'ai ce message d'erreur : "Objects of type 'function' can not be
converted to a COM VARIANT"

Donc a part me retaper les 100+ pages a la recherche d'output non
unicode encodés je n'ai plus d'idées !


Merci pour vos lumières


Julien
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Méta-MCI \(MVP\)
Le #18713731
Bonsoir !

Et comme ça :

class MyResponse(object):
@classmethod
def Write(self,instr):
Response.Write(unicode(instr))

Puis, remplacer tous les:
Response.Write(...
par:
MyResponse.Write(...


--
@-salutations
--
Michel Claveau
JB
Le #18743781
Méta-MCI (MVP) a écrit :
Bonsoir !

Et comme ça :

class MyResponse(object):
@classmethod
def Write(self,instr):
Response.Write(unicode(instr))

Puis, remplacer tous les:
Response.Write(...
par:
MyResponse.Write(...



"@classmethod" permet de pouvoir appeler directement MyResponse.Write ?

Justement je voulais éviter d'avoir a tout ré-ecrire le code qui est
historiquement 'php-style' donc lourd a faire évoluer.

voici une solution d'override adaptée d'une proposition de Mark Hammond,
en attendant de voir d'ou ce changement d'encodage vient dans son code
ou dans windows... :

<%@Language="Python"%>
<%
def my_write(v):
if not v: return
if isinstance(v, bool) or isinstance(v, long) or isinstance(v, int):
Response.__dict__['_real_write'](str(v))
return
try:
v = v.decode("utf-8")
except UnicodeDecodeError:
# au cas ou chaine passée deja en unicode
pass

Response.__dict__['_real_write'](v)

Response.__dict__['_real_write'] = Response.Write
Response.__dict__['Write'] = my_write

Response.Write("héhoo €")
%>

je n'ai plus qu'a mettre ca dans mon include principal et ca roule....

vive django :p

ju.
Méta-MCI \(MVP\)
Le #18746041
Bonsoir !

OK, ça peut marcher.
Mais, perso, je n'aime pas trop jouer avec les homonymes de
fonctions/objets. C'est une source de confusion dans mon esprit étroit,
que je préfère éviter.

--
@-salutations
--
Michel Claveau
Publicité
Poster une réponse
Anonyme