Кодировка хранилища данных Google App Engine? - PullRequest
5 голосов
/ 06 мая 2010

Я использую хранилище данных GAE для приложения Java и храню текст, который будет на многих языках. В моем сервлете я сначала проверяю, есть ли какие-либо данные в хранилище данных, и, если нет, я создаю их, как показано ниже:

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 Server Error. (Существуют некоторые другие записи с текстом справа налево, которые вообще не отображаются в средстве просмотра данных, но одна проблема за раз ...)

Могу ли я что-нибудь особенное сделать в своем коде, чтобы установить кодировку символов или указать GAE, что данные, которые я храню, имеют формат UTF-8? Или проблема на стороне Eclipse, и я должен что-то делать с моим Java-кодом?

Ответы [ 4 ]

1 голос
/ 02 сентября 2011

Исправлена ​​одна и та же проблема, задав кодировку запроса и ответа в utf-8. Запросить результаты кодирования в допустимой строке, хранящейся в хранилище данных, без которой значения будут сохранены как «???? ...»

Запросы: если вы используете Apache HTTP Client, это делается следующим образом:

Получить запрос:

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");
0 голосов
/ 03 апреля 2012

Я заметил, что вы уже настроили свой проект Eclipse на использование кодировки текста UTF-8.Вы дважды проверили текст, содержащийся в Java-файле, содержащем строку типа «Español»?

0 голосов
/ 07 июля 2010

У меня была такая же проблема с кодировкой несколько месяцев назад. Вы можете взглянуть на мои источники, может быть, это поможет: 1) http://code.google.com/p/vocrecaptor/source/browse/trunk/vocrecaptorweb/src/com/vocrecaptor/web/server/DictionaryServiceImpl.java

2) И класс /com/vocrecaptor/web/server/servlet/AbstractServiceServlet.java

0 голосов
/ 06 мая 2010

Вы уверены, что у вас есть проблемы с вашими данными? Я также сталкивался с подобными проблемами раньше, но оказалось, что это проблема в Python-версии Data Viewer. Я могу нормально получать свои данные на Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...