2010-01-02 5 views
0

Je suis en train de former-poster un fichier sql qui se compose de nombreux INSERTS, par exemple.python appengine fichier UFO8 formulaire-posté

INSERT INTO `TABLE` VALUES ('abcdé', 2759); 

puis-je utiliser re.search pour analyser et extraire les champs à mettre dans mon propre datastore. Le problème est que, bien que le fichier contienne des caractères accentués (voir le e est un é), une fois téléchargé il le perd et soit des erreurs ou stocke une représentation bytestring de celui-ci.

Heres ce que je suis actuellement en utilisant (et je l'ai essayé des charges d'alternatives):

form = cgi.FieldStorage() 
uFile = form['sql'] 
uSql = uFile.file.read() 
lineX = uSql.split("\n") # to get each line 

et ainsi de suite.

Quelqu'un at-il une façon robuste de faire ce travail? souvenez-vous que je suis sur appengine donc l'accès à certaines bibliothèques est restreint/interdit

+0

Vous dites "une fois téléchargé, il perd" - est-ce que l'é est tombé ou transformé en "e"? Essayez-vous de journaliser la chaîne de requête que vous obtenez? J'essaie de savoir si vous perdez vos données au moment où votre code voit la demande ou quand il essaie de stocker le résultat. –

+0

si vous imprimez uSql il rend l'é comme sur mon mac. – khany

Répondre

1

Vous mentionnez utf8 dans le titre de Q mais plus jamais: que faites-vous (en termes de définition des en-têtes et de vérification) pour vérifier quel encodage est en utilisation? Il devrait y avoir des en-têtes de la forme

Content-Type: text/plain; charset=utf-8 

et la partie est charset= où l'encodage est spécifié. Alors, quelles sont les valeurs lors de l'envoi et de la réception de ceci? Si charset est erroné, vous devrez peut-être manuellement effectuer un certain codage et décodage. Pour nous aider à évaluer ce que l'encodage semble être, en plus des en-têtes, quelle est la valeur ord de cet accented-e? Par exemple, si le codage était réellement iso-8859-1, cette valeur ord serait 233 (en décimal; 0xE9 en hexadécimal).

+0

hmm. votre analyse est détaillée mais trop pour mon niveau de compréhension. J'ai mentionné utf8 parce que tous les tests que j'ai essayés jusqu'à maintenant semblent inclure une référence à une fonction connexe. J'ai imprimé les en-têtes que vous mentionnez mais le navigateur restitue toujours le caractère de diamant noir. J'ai défini la page de soumission de formulaire avec les en-têtes meta pour charset et, pour être juste, le but ultime est d'envoyer les données dans le magasin de données, pas au navigateur. j'apprécierais plus d'instructions de bas niveau s'il vous plaît. – khany

+1

@khany, alors pourquoi ne pas ** nous montrer ** l'information cruciale que vous avez "imprimée" mais que vous gardez toujours pour vous?! Les "instructions de bas niveau" dont vous avez envie: montrez-nous ** tous les détails ** - votre code, les en-têtes, la valeur ord pour ce caractère accentué-e - ** ne supposez pas que nous pouvons juste diagnostiquer les bugs de votre code béni sans aucune information réelle de votre part !!! –

Questions connexes