2011-03-26 84 views
9

您好 我使用谷歌應用程序引擎的一個項目,我做什麼,我需要存儲一些字符串。我使用Java和JDOHelper.getPersistenceManagerFactory("transactions-optional")谷歌App Engine數據存儲串編碼的問題

在調試它在我的電腦一切正常,而絃樂被正確地保存。但是,當我將其上傳到谷歌應用程序引擎時,我保存的所有字符串都將其統一碼字符替換爲問號(?)。如果我轉到項目頁面上的DataViewer,我可以看到字符串實際上是用問號保存的。

就像我說的,我的電腦上運行時,它工作正常。有誰知道我應該做什麼?

+0

你說的是使用「編碼」字符串或「未編碼」字符串 – 2011-03-27 04:53:55

+0

什麼字符編碼你有沒有在你的網頁中指定? UTF-8對我來說工作正常。 – Eelke 2011-03-27 07:00:03

+0

我真的不知道。我對GAE和編碼材料相當陌生。但是我做了一個測試,試圖用字符串「å」直接從我的servlet寫入持久性管理器,並且運行良好。所以我想這與解碼通過POST進入的字符串有關。但正如我所說,調試本地 – Joel 2011-03-27 07:33:00

回答

3

這聽起來像你沒有指定你的HTTP POST內容的編碼。有關詳細信息,請參閱this question

1

像兔崽子說,你應該指定字符集。我仍然在Google App Engine上遇到了一些麻煩。在將charset設置爲UTF-8並使用Spring的CharacterEncodingFilter之後,沒有任何東西讓我困擾編碼。

How To Get Character Encoding Correct,其中包括有關該代碼添加到您的web.xml文件:

<filter> 
    <filter-name>SetCharacterEncoding</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>SetCharacterEncoding</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

一定要添加爲你的過濾器鏈的第一步!

此外,博客的作者建議在JSP頁面中的字符集設置爲UTF-8,以及:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
相關問題