Я создаю gwt приложение, которое хранит текст случайных веб-страниц в текстовом поле хранилища данных. Часто текст отформатирован UTF-8. Все файлы моего приложения хранятся как UTF-8 и когда я запускаю приложение на своей локальной машине, весь процесс хорошо работает. Текст UTF-8 хранится и восстановимый ftom как таковой локальная версия механизма приложения как UTF-8. Однако, когда я развертываю приложение на механизме приложения Google где-нибудь между тем, когда я храню текст и когда я получаю его, это больше не UTF-8, который заставляет символы неASCII быть отображенными как?.
Когда я просматриваю хранилище данных в appengine панели управления, все специальные символы появляются как? который приводит меня полагать, что это - проблема при записи в базу данных.
Кто-либо знает, как зафиксировать это?
Само приложение является немного большим. Вот некоторый псевдокод:
Text webPageText = new Text();
/*Some Code to store Text object on datastore
Specifically I'm using javax.jdo.PersistenceManager to do this.
Some Code to retrieve text from datastore. */
String retrievedText = webPageText.getValue();
Проблема состоит в том, что retrievedText возвращается с? вместо unicode символов.
Вот подобная проблема в Python, который я нашел: Попытка хранить данные Utf-8 в получении хранилища данных UnicodeEncodeError. Хотя мое приложение не получает ошибок.
К сожалению, я думаю, что строки Java являются значением по умолчанию utf-8, и я не могу найти код, который позволит мне объявить их явно как utf-8.
Править: Я теперь создал маленькое веб-приложение, которое берет в unicode тексте и хранит его в хранилище данных и затем получает его без проблем. Я все еще понятия не имею, где проблема находится в моем коде первоисточника, но я собираюсь изменить способ, которым мой код обрабатывает извлечение веб-страницы для соответствия малому приложению, которое я просто создал. Поблагодарите Вас все за свою справку.
Я попытался преобразовать String в ByteArray, а затем сохранить его как blob-объект хранилища данных.
//Save String as Blob
Blob webPageText = new Blob(<STRING THAT CONTAINS UNICODE CHARACTERS>.getBytes());
//Retrieve Blob as String
String retrievedText = new String(webPageText.getBytes());
Сначала я думал, что это решило проблему, но по ошибке я протестировал его только на моем локальном сервере. Этот код все еще возвращается? вместо символов Юникода, что наводит меня на мысль, что проблема не в хранилище данных, а в передаче от движка приложения к клиенту.
Эти ссылки могут оказаться полезными, в конце концов:
Как установить Google App Engine java Content-Type в UTF-8
http://code.google.com/appengine/docs/python/tools/webapp/buildingtheresponse.html