5

我正在为Java应用程序使用GAE数据存储,并存储一些将以多种语言显示的文本。在我的servlet,我第一次检查,看看是否有一个在数据存储中的任何数据,并且,如果没有,我创建了一些,类似以下内容: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); 
} 

由于这是使用JDO,我想我应该包括Lang类的培训相关部分也:

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

然而,非ASCII字符给我的悲伤。我已经将我的Eclipse项目设置为使用UTF-8编码,而不是默认的Cp1252,所以我认为从这个角度来看,我还好,但是当我使用App Engine Data Viewer查看我的数据时,条目变成了Espa±ol,当我点击它查看它时,我得到一个500服务器错误。 (还有一些其他条目从右到左的文本根本不在数据查看器中显示,但一次只有一个问题...)

有什么特别的我可以在我的设置字符编码的代码,还是将GAE指定为我要存储的数据是UTF-8?或者是Eclipse端的问题,并且我应该使用Java代码做些什么?

+0

不是说它本身就是一个“解决方案”,但是如果我手动插入数据,使用数据查看器,它会被插入正常,我的servlet从数据存储中提取数据并返回数据也会返回正确的数据。这可能成为我的解决方案;我只需要完成数据的初始加载,在此之后它不会被更新,因此手动进行是一种选择。虽然我更想知道编码解决方案为什么不起作用... – sernaferna 2010-05-06 17:09:06

回答

0

您确定您的数据有问题吗?我之前也遇到过类似的问题,但事实证明这是Data Viewer的Python版本中的一个问题。我可以在Java中检索我的数据。

+0

是的,我确定这是数据问题。当我通过Data Viewer手动输入数据时,我会看到数据齿,并且我的应用程序也能够通过JSON正确地获取数据。但是,当我通过Java代码创建数据时,它在到数据库的途中出现乱码。 – sernaferna 2010-05-06 20:45:19

+0

也许你的字符串已经在Java中混乱了。假设你的编辑器是UTF-8,但你的服务器是Latin-1。你会得到那个乱码的文字。 – 2010-05-06 21:04:56

1

固定同一问题通过设置请求和响应编码为utf-8。请求编码结果存储在数据存储的字符串,没有它的值将被存储为“???? ......”

要求:

:如果您使用Apache HTTP客户端,这是通过以下方式完成

GET请求:

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

POST请求:

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

回应:如果你建立了HttpServlet你的反应,这是在以下方式进行:

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

我注意到您已经将您的Eclipse项目设置为使用UTF-8文本编码。你是否检查过包含像“Español”这样的字符串的Java文件的文本引用?

相关问题