Пакет OSGi не отображает символы utf-8 - PullRequest
0 голосов
/ 19 января 2012

В моем Bundle я пытаюсь отобразить символы utf-8, полагаю, моя кодировка по умолчанию - Cp1250, и происходит странное поведение:

public class Activator implements BundleActivator {

    public void start(BundleContext context) throws Exception {
        System.out.println("ąśżłóę"); // this is what should've been displayed
        System.out.println("������"); // this is the utf8 above encoded to cp1250
    }

    public void stop(BundleContext context) throws Exception {
    }

    public static void main(String args[]){
        System.out.println("ąśżłóę"); //utf-8
        System.out.println("������"); //cp1250
    }
}

Вывод, когда я запускаю main, я получаю то, что ожидал:

ąśżłóę
ąśżłóę

Выводится, когда я запускаю Bundle из OSGi Framework, символы кодируются от utf-8 до cp1250.Таким образом, результат совершенно противоположен.

ąśżłóę
ąęźł

Итак, мой вопрос: как с этим бороться?Должен ли я написать приложение в cp1250 вместо utf-8?Или есть возможность изменить кодировку osgi по умолчанию?

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Несколько замечаний:

  • При компиляции исходных кодов Java убедитесь, что кодировка компилятора соответствует кодировке вашего редактора (обычно это не проблема в IDE)
  • Во время выполнения строки Java всегда имеют формат UTF-16 (формат класса хранит литералы в виде измененного UTF-8, но разработчикам не нужно об этом беспокоиться)
  • System.out перекодирует строки UTF-16 в кодировка платформы по умолчанию ;это может быть процесс с потерями, если кодировка не является Unicode
  • Если потребитель потока stdout (консоль или любое другое приложение) не декодирует свой ввод с использованием той же кодировки, может произойти повреждение символа
  • Существует не поддерживаемый механизм для изменения кодировки платформы по умолчанию в JRE (в том числе с использованием -Dfile.encoding=foo)

Способ корректировки выходных данных будет зависеть отустройство, на которое вы пытаетесь записать.См. здесь и здесь для cmd.exe.См. здесь для получения более общей информации о кодировке Java.

2 голосов
/ 19 января 2012

AFAIK OSGi ничего не делает с кодировкой по умолчанию.Похоже, вы запускаете тест из IDE, который дает правильный результат, но когда запускается платформа OSGi, JVM получает кодировку по умолчанию ОС (windows?).-Dfile.encoding=UTF-8 (подробнее см. этот ответ )

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