2011-02-03 9 views
4

Я пытаюсь войти некоторый русский текст:Google App Engine кодирования

LOG.info("тестирование русского"); 

Но я получаю вопрос символов вместо (просмотр с веб-сайтов):

[приложение-ID/приложение-версию ] .: 15: 18: 44,753 INFO [класс] - ???????????? ????????

Файл Java, сохраненный с кодировкой UTF-8. Все настройки по умолчанию.

Даже я прочитал файл в UTF-8 с русскими символами и попытаюсь что-то записать из него - кодировка тоже неверна.

+0

Вы пытались отправить текст в виде строки в виде юникода? –

+0

Полезно знать, что по умолчанию «Charset» находится на GAE (по-видимому, ASCII), который я * верю * - это модифицированный экземпляр Jetty, работающий по своему вкусу или Linux. – IAmYourFaja

ответ

3

У меня была аналогичная проблема с текстом на иврите. Я узнал, что это было вызвано кодировкой по умолчанию.

Чтобы проверить кодировку по умолчанию, я использовал этот код:

OutputStreamWriter out = new OutputStreamWriter(new ByteArrayOutputStream()); 
String encoding = out.getEncoding(); 

На моем компьютере, кодировка "UTF8". На сервере GAE это «ASCII».

Я решил проблему замены всех читателей файлов в моем коде с:

new InputStreamReader(new FileInputStream(file), "UTF8")); 

Это говорит Java игнорировать кодировку по умолчанию, и открыть все входные файлы, как UTF8.

+0

Прохладный, я пробовал много разных подходов, но этот был действительно полезен! – heroin

1

Попробуйте это. По-видимому, GAE пытается автоопределить кодировку и терпит неудачу. Даже постоянные струны были перепутаны

public class Util { 
    public static String FixRussianString(String string){ 
     try { 
      return new String(string.getBytes("CP1251"), "UTF-8"); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     return string; 
    } 
}