2011-04-18 5 views
4

J'utilise Java. Ce sont les données pure qui est insérée dans le datastore:Google App Engine - Les données sont stockées de manière étrange

<p>Something</p>\n<p>That</p>\n<p> </p>\n<p>Should.</p>\n<p> </p>\n 
<p>I have an interesting question.</p>\n<p>Why are you like this?</p>\n 
<p> </p>\n<p>Aren't you fine?</p> 

Voici comment il est stocké:

<p>Something</p> <p>That</p> <p>�</p> <p>Should.</p> <p>�</p> 
<p>I have an interesting question.</p> <p>Why are you like this?</p> 
<p>�</p> <p>Aren't you fine?</p> 

Quoi de neuf avec les symboles étranges? Cela se produit uniquement en direct, pas sur mon serveur local dev_appserver.

EDIT

Voici le code qui insère les données:

String content = ""; // this is where the data is stored 
try { 
    ServletFileUpload upload = new ServletFileUpload(); 
    FileItemIterator iter = upload.getItemIterator(request); 
    while(iter.hasNext()) { 
     FileItemStream item = iter.next(); 
     InputStream stream = item.openStream(); 

     if(item.isFormField()) { 
      String fieldName = item.getFieldName(); 
      String fieldValue = new String(IOUtils.toByteArray(stream), "utf-8"); 
      LOG.info("Got a form field: " +fieldName+" with value: "+fieldValue); 
      // assigning the value 
      if(fieldName.equals("content")) content = fieldValue; 
     } else { 
      ... 
     } 
    } 
} catch (FileUploadException e){ 
} 

... 
// insert it in datastore 
Recipe recipe = new Recipe(user.getKey(), title, new Text(content), new Text(ingredients), tagsAsStrings); 
pm.makePersistent(recipe); 

C'est une forme multipart/form-data donc je dois faire ce petit item.isFormField() magique pour obtenir le contenu réel, et construire une chaîne. Peut-être que cela cause le problème d'encodage bizarre? Pas certain.

Pour récupérer les données que je fais simplement:

<%=recipe.getContent().getValue()%> 

Depuis content est de type texte (application de type de moteur) J'utilise le .getValue() pour obtenir le résultat réel. Je ne pense pas que ce soit un problème avec la récupération des données, puisque je peux voir les caractères étranges directement dans la visionneuse de datastore en ligne app-engine.

+0

\ n est l'indicateur d'une nouvelle ligne. Est-ce cela que vous voulez dire? –

+1

C'est 99% un problème d'encodage; comment gérez-vous l'encodage dans votre code? Pouvez-vous poster un extrait pertinent? – systempuntoout

+0

@systempuntoout: Je ne m'en occupe pas. Y a-t-il quelque chose de spécial à faire? –

Répondre

0

Utilisez-vous eclipse? si oui, vérifiez sous Fichier> Propriétés> Codage du fichier texte que votre fichier est codé en UTF-8.

Je ne pense pas. Donc, changez le en UTF-8 et votre problème devrait être résolu.

concernant

didier

+0

Cela ne prendra en charge que le codage du code source .java, qui est un problème distinct. –