Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谷歌应用引擎数据存储编码?_Java_Google App Engine_Character Encoding_Google Cloud Datastore - Fatal编程技术网

Java 谷歌应用引擎数据存储编码?

Java 谷歌应用引擎数据存储编码?,java,google-app-engine,character-encoding,google-cloud-datastore,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..

我正在为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);
}
然而,非ASCII字符让我感到悲伤。我已经将我的Eclipse项目设置为使用UTF-8编码而不是默认的Cp1252,所以我认为从这个角度来看我没问题,但是当我使用AppEngine Data Viewer查看我的数据时,Español条目变成了EspaÃol,当我点击它查看时,我得到一个500服务器错误。(还有一些从右到左的文本条目甚至根本不显示在Data Viewer中,但一次只出现一个问题…)


在我的代码中有什么特殊的方法可以设置字符编码,或者指定我存储的数据是UTF-8吗?或者问题出在Eclipse方面,我应该用Java代码做些什么吗?

您确定您的数据有问题吗?我以前也遇到过类似的问题,但事实证明这是Data Viewer的Python版本中的一个问题。我可以用Java很好地检索数据。

几个月前,我认为编码也有同样的问题。你可以看看我的资料,也许会有帮助: (一)


2) 而class/com/vocrecaptor/web/server/servlet/AbstractServiceServlet.java通过将请求和响应编码都设置为utf-8解决了相同的问题。请求编码导致有效字符串存储在数据存储中,如果没有有效字符串,则值将存储为“?”

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

HttpServletResponse resp;
...
resp.setContentType("text/html; charset=utf-8");
获取请求:

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"));
后请求:

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

我注意到您已经将Eclipse项目设置为使用UTF-8文本编码。您是否仔细检查了包含字符串“Español”的Java文件的文本编码?

并不是说它本身就是一个“解决方案”,而是说如果我使用data Viewer手动插入数据,它会很好地插入,而我的servlet从数据存储中提取数据并返回数据,它也会很好地返回数据。这可能成为我的解决方案;我只需要完成数据的初始加载,之后就不会更新,所以手动加载是一种选择。虽然我更想知道为什么编码解决方案不起作用……是的,我确信这是数据的问题。当我通过data Viewer手动输入数据时,我会看到数据,我的应用程序也能够通过JSON正确地返回数据。但是,当我通过Java代码创建数据时,它在进入数据库的过程中不知何故被弄乱了。也许你的字符串已经在Java中弄乱了。假设您的编辑器是UTF-8,但您的服务器是拉丁语-1。你会得到那篇乱七八糟的文章。