Если же на компьютере сделаны местные установки, как говорят на жаргоне "установлена локаль" (locale) (в MS Windows это выполняется утилитой Regional Options (Язык и стандарты) в окне Control Panel (Панель управления)), то компилятор, прочитав эти установки, создаст символы Unicode, соответствующие местной кодовой странице. В русифицированном варианте MS Windows это обычно кодовая страница CP1251.

Если исходный массив с кириллическим ASCII-текстом был в кодировке CP1251, то строка Java будет создана правильно. Кириллица попадет в свой диапазон '\u0400'— '\u04FF' кодировки Unicode.

Но у кириллицы есть еще по меньшей мере четыре кодировки:

□ в MS-DOS применяется кодировка CP866;

□ в UNIX обычно применяется кодировка KOI8-R;

□ на компьютерах Apple Macintosh используется кодировка MacCyrillic;

□ есть еще и международная кодировка кириллицы ISO8859-5.

Например, байт 11100011 (0xE3 — в шестнадцатеричной форме) в кодировке CP1251 представляет кириллическую букву г, в кодировке CP866 — букву у, в кодировке KOI8-R — букву ц, в ISO8859-5 — букву у, в MacCyrillic — букву г.

Если исходный кириллический ASCII-текст был в одной из этих кодировок, а местная кодировка — CP1251, то Unicode-символы строки Java не будут соответствовать кириллице.

В этих случаях применяются последние четыре конструктора, в которых параметром encoding или charset указывается, какую кодовую таблицу использовать конструктору при создании строки.

Листинг 5.1 показывает различные случаи записи кириллического текста. В нем создаются три массива байтов, содержащих слово "Россия" в трех кодировках:□ массив byteCp1251 содержит слово "Россия" в кодировке CP1251;□ массив byteCp866 содержит слово "Россия" в кодировке CP866;□ массив byteKOI8R содержит слово "Россия" в кодировке KOI8-R.Из каждого массива создаются по три строки с использованием трех кодовых таблиц.Кроме того, из массива символов c[] создается строка s1, из массива байтов, записанного в кодировке CP866, создается строка s2. Наконец, создается ссылка s3 на строку-константу.Листинг 5.1. Создание кириллических строк

class StringTest{

null,winLikeUNIX =null
null,dosLikeUNIX =null
null,unixLikeUNIX =null

public static void main(String[] args){ String winLikeWin = null, winLikeDOS String dosLikeWin = null, dosLikeDOS String unixLikeWin = null, unixLikeDOS String msg = null; byte[] byteCp1251 = {

(byte)0xD0, (byte)0xEE, (byte)0xF1, (byte)0xF1, (byte)0xE8, (byte)0xFF

};

byte[] byteCp866 = {

(byte)0x90, (byte)0xAE, (byte)0xE1, (byte)0xE1, (byte)0xA8, (byte)0xEF

};

byte[] byteKOI8R = {

(byte)0xF2, (byte)0xCF, (byte)0xD3, (byte)0xD3, (byte)0xC9, (byte)0xD1

};

char[] c = {'Р', 'о', 'с', 'с', 'и', 'я'};

String s1 = new String(c);

String s2 = new String(byteCp866); // Для консоли MS Windows

String s3 = "Россия";

System.out.println(); try{

// Сообщение в Cp866 для вывода на консоль MS Windows
msg = new String("\"Россия\" в ".getBytes("Cp866") ,"Cp1251");
winLikeWin= newString(byteCp1251,"Cp1251");//Правильно
winLikeDOS= newString(byteCp1251,"Cp866");
winLikeUNIX= newString(byteCp1251,"KOI8-R");
dosLikeWin= newString(byteCp866,"Cp1251");//Для консоли
dosLikeDOS= newString(byteCp866,"Cp866");//Правильно
dosLikeUNIX= newString(byteCp866,"KOI8-R") ;
unixLikeWin= newString(byteKOI8R,"Cp1251");
unixLikeDOS= newString(byteKOI8R,"Cp866");
unixLikeUNIX= newString(byteKOI8R,"KOI8-R") ;//Правильно

System.out.print(msg + "Cp1251: ");

System.out.write(byteCp1251);

System.out.println();

System.out.print(msg + "Cp866 : ");

System.out.write(byteCp866);

System.out.println();

System.out.print(msg + "KOI8-R: ") ;

System.out.write(byteKOI8R);

}catch(Exception e){ e.printStackTrace();

}

System.out.println();

System.out.println();

"char array :II+s1);
"default encoding:II+s2);
"string constant :II+s3);
"Cp1251 ->Cp1251II+winLikeWin);
"Cp1251 ->Cp866 :II+winLikeDOS);
"Cp1251 ->KOI8-RII+winLikeUNIX);
"Cp866 ->Cp1251II+dosLikeWin);
"Cp866 ->Cp866 :II+dosLikeDOS);
"Cp866 ->KOI8-RII+dosLikeUNIX);
"KOI8-R ->Cp1251II+unixLikeWin);
"KOI8-R ->Cp866 :II+unixLikeDOS);
"KOI8-R ->KOI8-RII+unixLikeUNIX)
Перейти на страницу:

Все книги серии В подлиннике

Похожие книги