Java: Различия в кодировке строки UTF-8 между локальным приложением и Google App Engine - PullRequest
4 голосов
/ 16 июня 2011

Я пытаюсь заставить веб-приложение Google App Engine отправлять обратно кодированный в кодировке UTF-8 текст в браузер. Я делаю это, написав это:

byte[] utf8Bytes = "æøå".getBytes("UTF-8");

Когда я делаю это локально, я получаю байтовый массив с 6 байтами назад. Когда я делаю это в Google App Engine, я получаю массив с 12 байтами назад. Странно, а?

Кто-нибудь знает почему?

Мне удалось написать кодированный в UTF-8 текст из GAE, кодировав байты самостоятельно, и записать необработанные байты обратно. Как это:

output.write(new byte[]{(byte)0xc3, (byte)0xa5, (byte) 0xc3, (byte)0xa6, (byte)0xc3, (byte)0xb8 });

И это действительно работает. Но есть ли у кого-нибудь ответ на вопрос, почему String в GAE кодируются иначе, чем локально?

Примечание. Кодирование символов с помощью экранирования Юникод работает следующим образом:

byte[] utf8Bytes = "\u00E5\u00F8\u00E6".getBytes("UTF-8");

Ответы [ 2 ]

5 голосов
/ 16 июня 2011

Байты, которые вы получаете от GAE, заставляют меня предположить, что файл исходного кода с литералом "æøå" сохранен как UTF-8, но скомпилирован с компилятором, который ожидает, что исходные файлы будут закодированы как ISO-8859- 1, ISO-8859-15 или Cp1252.

Если вы строите свой исходный код с помощью Ant или Maven, вы должны указать кодировку исходного файла в вашем build.xml или pom.xml.

1 голос
/ 16 июня 2011

Вы уверены, что задали кодировку содержимого в HttpServletResponse до получения Writer?

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