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文件的文本引用?

相關問題