gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:53:27 25 4
gpt4 key购买 nike

我正在为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com