2010-11-24 24 views
1

Malheureusement, je travaille sur une plate-forme obscure appelée uniPaaS, donc je suis probablement après un conseil indépendant de la plate-forme.Les données XML UTF-8 sont écrites différemment

J'ai une demande de service Web où le document XML contient ces citations intelligentes irritantes. Les données d'octets pour le caractère est E2 80 99 (qui est un 00002019 RIGHT SINGLE QUOTATION MARK)

Wireshark capture of SOAP request

Quand j'écris le fichier XML sur le disque sur notre serveur de mise en scène, il écrit correctement. Quand je l'écris sur notre serveur de production, il change totalement les valeurs de ces octets et malforms le document XML:

Hex comparison of the two files

E2 80 99 devient 92. Quelqu'un at-il déjà vu ce genre de comportement auparavant? Il semble que ce soit seulement cette chaîne d'un octet (mais la réponse de SOAP est de 50Mb de large, donc je n'ai pas eu l'occasion de différer le fichier entier).

+0

Très trop peu d'informations. Veuillez décrire brièvement votre plateforme. Aussi: Comment le fichier est-il écrit sur le disque? Quelles différences y a-t-il entre la mise en scène et la production? Quel programme exactement fait l'écriture? etc etc etc – sleske

+0

@sleske, Je ne peux pas vraiment fournir cette information car l'environnement (uniPaaS) est un outil RAD P/SaaS, donc toute cette information est abstraite. Les deux systèmes sont identiques (versions clonées les uns des autres), mais Ignacio a pu repérer le motif entre les deux fichiers, ce qui aide beaucoup. –

+2

Au cas où vous ne l'auriez pas compris d'après la réponse d'Ignacio, 'E2 80 99' ne devient pas '92 73 20', il devient juste' 92'. Les '73' et' 20' sont les caractères suivants. –

Répondre

6

Il est codé comme CP1251.

>>> '\x92'.decode('cp1251').encode('utf-8') 
'\xe2\x80\x99' 
+0

Brillant, merci. Je sais quel est le problème maintenant, et ce n'est pas quelque chose que je peux réparer, je vais devoir ouvrir un rapport de bogue avec les développeurs de la plateforme. –

+1

Beau travail. Alors que nous sommes occupés à deviner: le problème est peut-être que quelque part un codeur par défaut à l'encodage OS standard (Java aime par exemple faire cela). Si le codage OS standard est défini différemment sur les deux systèmes, cela peut provoquer le problème. – sleske