5

Sto utilizzando il datastore GAE per un'applicazione Java e sto memorizzando del testo che sarà in molte lingue. Nel mio servlet, io sono il primo controllo per vedere se ci sono tutti i dati nell'archivio dati, e, se no, sto creando un po ', simile al seguente:Codifica del datastore di Google App Engine?

ArrayList<Lang> list = new ArrayList<Lang>(); 
list.add(new Lang("EN", "English", 1)); 
list.add(new Lang("ES", "Español", 0)); 
//more languages here... 

PersistenceManager pm = PMF.get().getPersistenceManager(); 
for(Lang l : list) { 
    pm.makePersistent(l); 
} 

Dal momento che questo sta usando JDO, ho Immagino che devo includere le parti rilevanti della classe Lang troppo:

@PersistenceCapable 
public class Lang { 
@PrimaryKey 
private String code; 
@Persistent 
private String name; 
@Persistent 
private int popularity; 
// getters & setters & constructors... 
} 

Tuttavia, i caratteri non ASCII mi stanno dando dolore. Ho impostato il mio progetto Eclipse per utilizzare la codifica UTF-8 invece del Cp1252 predefinito, quindi ho penso Sono a posto da quella prospettiva, ma quando utilizzo App Engine Data Viewer per guardare i miei dati, quello Español la voce diventa España e quando faccio clic su di essa per visualizzarla, ricevo un errore di 500 server. (Ci sono altre voci con testo da destra a sinistra che non appaiono affatto nel Data Viewer, ma un problema alla volta ...)

C'è qualcosa di speciale che posso fare nel mio codice per impostare la codifica dei caratteri o specificare su GAE che i dati che sto memorizzando sono UTF-8? O è il problema sul lato Eclipse, e c'è qualcosa che dovrei fare con il mio codice Java?

+0

Non è una "soluzione" di per sé, ma se inserisco i dati manualmente, utilizzando il Visualizzatore dati, viene inserito correttamente, e il mio servlet che estrae i dati dal datastore e lo restituisce restituisce anche i dati fini. Questa potrebbe diventare la mia soluzione; Ho solo bisogno del carico iniziale di dati da eseguire e dopo non verrà aggiornato, quindi eseguirlo manualmente è un'opzione. Anche se preferirei sapere perché la soluzione di codifica non funzionava ... – sernaferna

risposta

0

Sei sicuro di avere un problema con i tuoi dati? Ho anche riscontrato problemi simili prima ma risulta che si tratta di un problema nella versione Python del Data Viewer. Posso recuperare i miei dati bene in Java.

+0

Sì, sono sicuro che è un problema con i dati. Quando inserisco manualmente i dati tramite il Visualizzatore dati, visualizzo i dati e la mia app è in grado di ripristinare correttamente i dati tramite JSON.Ma quando creo i dati tramite il codice Java, in qualche modo viene ingarbugliato nel suo percorso verso il database. – sernaferna

+0

Forse la tua stringa è già incasinata in Java. Supponi che il tuo editor sia in UTF-8 ma il tuo server è in Latin-1. Otterrai quel testo confuso. –

1

stesso Risolto il problema impostando sia la codifica di richiesta che di risposta a utf-8. risultati Richiesta di codifica a stringa valida memorizzata nell'archivio dati, senza di essa valori saranno memorizzati come "???? ..."

Richieste: se si utilizzano client HTTP Apache, questo viene fatto nel modo seguente:

richiesta

Get:

NameValuePair... params; 
... 
String url = urlBase + URLEncodedUtils.format(Arrays.asList(params), "UTF-8"); 
HttpGet httpGet = new HttpGet(url); 

Inserisci richiesta:

NameValuePair... params; 
... 
HttpPost httpPost = new HttpPost(url); 
httpPost.setEntity(new UrlEncodedFormEntity(Arrays.asList(params), "UTF-8")); 

risposta: se si costruisce la vostra risposta in HttpServlet, questo è fatto in un modo che segue:

HttpServletResponse resp; 
... 
resp.setContentType("text/html; charset=utf-8"); 
0

ho notato che hai già impostato il tuo progetto Eclipse per utilizzare la codifica del testo UTF-8. Hai ricontrollato l'enconding del testo del file Java contenente la stringa come "Español"?

Problemi correlati