java - Google App Engine 数据存储区编码?

标签 java google-app-engine character-encoding google-cloud-datastore

我正在为 Java 应用程序使用 GAE 数据存储,并存储一些将以多种语言显示的文本。在我的 servlet 中,我首先检查数据存储中是否有任何数据,如果没有,我将创建一些,类似于以下内容:

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 数据查看器查看在我的数据中,Español 条目变成了 Español,当我单击它查看它时,出现 500 服务器错误。 (还有一些其他条目从右到左的文本根本不会显示在数据查看器中,但一次出现一个问题...)

我可以在我的代码中做些什么来设置字符编码,或者向 GAE 指定我存储的数据是 UTF-8?或者是 Eclipse 方面的问题,我应该对我的 Java 代码做些什么?

最佳答案

通过将请求和响应编码都设置为 utf-8 解决了同样的问题。请求编码导致存储在数据存储中的有效字符串,如果没有它,值将存储为“????...”

请求:如果您使用 Apache HTTP 客户端,则按以下方式完成:

获取请求:

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

发布请求:

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

关于java - Google App Engine 数据存储区编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781718/

相关文章:

python BeautifulSoup查找span id名称而不使用string\re方法

Java文件解析工具包设计,快速文件编码完整性检查

java - 十六进制表示占用的空间超出应有的空间

java - 如何在解析 JSON 时找到父 Json 节点

java - 如何对两个字符串数组进行排序

google-app-engine - 如何强制谷歌应用引擎使用 https ssl 协议(protocol)?

google-app-engine - Google 应用引擎 - 本地开发服务器时区

java.sql.SQLException : Connections could not be acquired from the underlying database 异常

Java 基础对象多类型变量

python - 如何在 Google App Engine 数据存储中存储正则表达式?