На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Java FAQ
1. Данный раздел предназначен только для публикации готовых статей, с вопросами обращайтесь в соответствующие подразделы.
2. Все вопросы, связанные с ошибками или неточностями в представленных материалах направляйте модераторам персональным сообщением.
3. Все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут доступны остальным участникам после одобрения модераторами.
Модераторы: dark_barker, wind
  
> Кодировки и корректный вывод (как вывести кириллицу в нужной кодировке) , статья их старых Java FAQ
    При создании строк конструктор String(byte[] byteArray, String encoding) создает Unicode-строку из массива байтовых ASCII-кодировок символов. В самом простом случае компилятор для получения двубайтовых символов Unicode добавит к каждому байту сташий нулевой бит. Получится диапазон '\u0000'-'\u04ff' кодировки Unicode, соответствующий кодам Latin1. Тексты на кириллице будут выведены неправильно. Если на компьютере установлена локаль, то компилятор создаст символы Unicode соответственно местной кодовой странице (в Windows обычно CP1251, в DOS - CP866, *nix - KOI8-R). Если локальная кодировка совпадает с кодировкой выводимых символов, то строка будет верна. Если исходный кириллический ASCII-текст был в одной кодировке, а местная - другая, то Unicode-строки Java не будут соответствовать кириллице. В этих случаях используется этот конструктор, с параметром нужной кодировки. Таким образом, если поток байт выводится и на консоль (CP866) и в файл (CP1251) Windows, то результат будет отличаться. Правильные символы Unicode-кириллицы получаются, если использовать ту же кодовую таблицу, в которой записан исходный массив байт. При выводе же строки на консоль, в окно, в файл или при передаче по сети лучше преобразовать строку Java с символами Unicode по правилам выхода в нужное место.

    Пример преобразования 1: для вывода на консоль DOS (Cp866) строки в кодировке Windows (Сp1251)
    Дан массив байт:

    ExpandedWrap disabled
      byte[] byteCp866 = {
          (byte)0x90, (byte)0xAE, (byte)0xE1,
          (byte)0xE1, (byte)0xA8, (byte)0xEF
      };

    Создаем строку для вывода в другой кодировке:

    ExpandedWrap disabled
      dosLikeWin = new String (byteCp866, "Cp1251");

    Пример преобразования 2: из Unicode в Windows Cp1251

    ExpandedWrap disabled
      String newString = new String(oldString.getBytes("UTF-8"), "Cp1251");

    [Примечание: не следует забывать, что оба этих преобразования будут успешны только в том случае, если в строка была действительно инициализирована байтами, содержащими отличную от стандартной (utf-16) кодировку - wind]

    [Автор - Angie]
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0176 ]   [ 15 queries used ]   [ Generated: 25.04.24, 11:54 GMT ]