5

Ich verwende den GAE-Datenspeicher für eine Java-Anwendung und speichere Text in zahlreichen Sprachen. In meinem Servlet, bin ich zum ersten Mal überprüft, um zu sehen, ob es irgendwelche Daten in dem Datenspeicher ist, und, wenn nicht, ich einige, ähnlich den folgende bin erstellen:Google App Engine-Datenspeichercodierung?

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); 
} 

Da dies JDO mit, ich denke, ich sollte auch die relevent Teile der Lang Klasse umfassen:

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

die nicht-ASCII-Zeichen mir jedoch geben Trauer. Ich habe mein Eclipse-Projekt auf die UTF-8-Codierung anstelle der Standard-Cp1252, so dass ich denke Ich bin okay aus dieser Perspektive, aber wenn ich den App Engine Data Viewer verwenden, um meine Daten zu sehen, dass Español Eintrag wird Español, und wenn ich darauf klicke, um es anzuzeigen, erhalte ich einen 500 Server Fehler. (Es gibt einige andere Einträge mit Text von rechts nach links, die nicht einmal im Datenviewer angezeigt werden, sondern ein Problem nach dem anderen ...)

Gibt es etwas Besonderes, was ich in meinem tun kann? Code, um die Zeichenkodierung einzustellen, oder geben Sie GAE an, dass die Daten, die ich speichere, UTF-8 sind? Oder ist das Problem auf der Eclipse-Seite, und sollte ich etwas mit meinem Java-Code machen?

+0

Nicht, dass es eine "Lösung" an sich ist, aber wenn ich die Daten manuell einfüge, wird der Data Viewer verwendet, und mein Servlet, das Daten aus dem Datenspeicher holt und zurückgibt, gibt auch die Daten zurück. Dies könnte meine Lösung werden; Ich brauche nur die anfängliche Ladung von Daten zu tun, und danach wird es nicht aktualisiert werden, so dass es manuell eine Option ist. Obwohl ich lieber wissen wollte, warum die Codelösung nicht funktionierte ... – sernaferna

Antwort

0

Sind Sie sicher, dass Sie ein Problem mit Ihren Daten haben? Ich habe auch schon ähnliche Probleme festgestellt, aber es stellt sich heraus, dass es ein Problem in der Python-Version des Daten-Viewers ist. Ich kann meine Daten in Java problemlos wiederherstellen.

+0

Ja, ich bin mir sicher, dass es ein Problem mit den Daten ist. Wenn ich die Daten manuell über den Daten-Viewer eintrage, sehe ich die Daten-Zacke und meine App kann die Daten auch über JSON korrekt zurückholen.Aber wenn ich die Daten über Java-Code erstelle, wird er irgendwie auf dem Weg zur Datenbank verstümmelt. – sernaferna

+0

Vielleicht ist Ihre Zeichenfolge bereits in Java durcheinander. Angenommen, Ihr Editor ist in UTF-8, aber Ihr Server befindet sich in Latin-1. Sie werden diesen verstümmelten Text bekommen. –

1

Fest gleiches Problem, indem sowohl Anfrage als auch Antwort, die an utf-8 kodiert. Anfrage Codierung Ergebnisse in gültige Zeichenfolge in Datenspeicher gespeichert werden, ohne dass es Werte als „???? ...“

Anfragen werden gespeichert: Wenn Sie Apache HTTP-Client verwenden, dies auf folgende Art und Weise durchgeführt wird:

Get-Anfrage:

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

Gesuch:

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

Antwort: wenn Sie Ihre Antwort in HttpServlet bauen, dies auf folgende Weise durchgeführt wird:

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

Ich stelle fest, dass Sie Ihr Eclipse-Projekt bereits auf UTF-8-Textkodierung eingestellt haben. Haben Sie den Text der Java-Datei mit der Zeichenfolge "Español" überprüft?