【问题标题】:Google app engine datastore string encoding problem谷歌应用引擎数据存储字符串编码问题
【发布时间】:2011-07-23 16:26:05
【问题描述】:

你好 我正在为我正在做的一个项目使用 Google App Engine,我需要存储一些字符串。我正在使用 Java 和 JDOHelper.getPersistenceManagerFactory("transactions-optional")

在我的计算机上调试它时一切正常并且字符串被正确保存。但是当我将它上传到谷歌应用引擎时,我保存的所有字符串都会用问号(?)替换它们的 unicode 字符。如果我去项目页面上的DataViewer,我可以看到Strings实际上是用问号保存的。

就像我说的,在我的电脑上运行它时它运行良好。有谁知道我该怎么做?

【问题讨论】:

  • 你说的是使用“编码”字符串还是“未编码”字符串
  • 您在页面中指定了哪些字符编码? UTF-8 对我来说很好用。
  • 我真的不知道。我对 GAE 和编码东西很陌生。但是我做了一个测试,试图从我的servlet直接写一个带有char“å”的字符串到persistancemanager,效果很好。所以我想这与解码通过 POST 传入的字符串有关。但正如我所说,在本地调试时工作正常
  • 感谢您的努力,但这只是一场编码噩梦,不知道我做了什么不同的事情,但现在可以了......
  • @Luca:你有什么可以添加的细节可以帮助某人找出解决方案吗? @Joel:如果您可以提供任何可能对遇到相同问题的其他人有所帮助的详细信息(或答案)。谢谢。

标签: java string google-app-engine character-encoding


【解决方案1】:

就像 Jackrabbit 所说,您应该指定字符集。我在 Google App Engine 上仍然遇到了一些麻烦。在将字符集设置为 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"%>

【讨论】:

    【解决方案2】:

    听起来您没有为 HTTP POST 内容指定编码。详情请查看this question

    【讨论】:

      猜你喜欢
      • 2014-10-21
      • 2013-05-17
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 2011-05-13
      相关资源
      最近更新 更多