Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet287/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   283   284   285   286   287   288   289   290   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.14 .Символы,.строки.и.обработка.текста
текстовый файл, предназначенный для японской версии Windows 95, нужно сохра-
нить текст в Юникоде, используя код Shift-JIS (кодовая страница 932). Аналогично 
с помощью кода Shift-JIS можно прочитать в CLR текстовый файл, созданный 
в японской версии Windows 95.
Кодирование обычно выполняется перед отправкой строки в файл или сетевой 
поток с помощью типов 
System.IO.BinaryWriter
и 
System.IO.StreamWriter
. Де-
кодирование обычно выполняется при чтении из файла или сетевого потока с по-
мощью типов 
System.IO.BinaryReader
и 
System.IO.StreamReader
. Если кодировка 
явно не указана, все эти типы по умолчанию используют код UTF-8 (UTF означает 
Unicode Transformation Format). В этом разделе операции чтения и записи строк 
в потоки рассмотрены более подробно.
К счастью, в FCL есть типы, упрощающие операции кодирования и декодиро-
вания. К наиболее часто используемым кодировкам относят UTF-16 и UTF-8.
‰
UTF-16 кодирует каждый 16-разрядный символ в 2 байта. При этом символы 
остаются, как были, и сжатия данных не происходит — скорость процесса отлич-
ная. Часто код UTF-16 называют еще Юникод-кодировкой (Unicode encoding). 
Заметьте также, что, используя UTF-16, можно выполнить преобразование 
из прямого порядка байтов (big endian) в обратный (little endian), и наоборот.
‰
UTF-8 кодирует некоторые символы одним байтом, другие — двумя байтами, тре-
тьи — тремя, а некоторые — четырьмя. Символы со значениями ниже 0x0080, 
которые в основном используются в англоязычных странах, сжимаются в один 
байт. Символы между 0x0080 и 0x07FF, хорошо подходящие для европейских 
и среднеазиатских языков, преобразуются в 2 байта. Символы, начиная с 0x0800 
и выше, предназначенные для языков Восточной Азии, преобразуются в 3 байта. 
И наконец, пары символов-заместителей (surrogate character pairs) записыва-
ются в 4 байта. UTF-8 — весьма популярная система кодирования, однако она 
уступает UTF-16, если нужно кодировать много символов со значениями от 
0x0800 и выше.
Хотя для большинства случаев подходят кодировки UTF-16 и UTF-8, FCL под-
держивает и менее популярные кодировки.
‰
UTF-32 кодирует все символы в 4 байта. Эта кодировка используется для созда-
ния простого алгоритма прохода символов, в котором не требуется разбираться 
с символами, состоящими из переменного числа байтов. В частности, UTF-32 
упрощает работу с символами-заместителями, так как каждый символ состоит 
ровно из 4 байт. Ясно, что UTF-32 неэффективна с точки зрения экономии 
памяти, поэтому она редко используется для сохранения или передачи строк 
в файл или по сети, а обычно применяется внутри программ. Стоит также за-
метить, что UTF-32 можно задействовать для преобразования прямого порядка 
следования байтов в обратный, и наоборот.
‰
UTF-7 обычно используется в старых системах, где под символ отводится 7 раз-
рядов. Этой кодировки следует избегать, поскольку обычно она приводит не 


393
Кодировки:.преобразования.между.символами.и.байтами
к сжатию, а к раздуванию данных. Комитет Unicode Consortium настоятельно 
рекомендует отказаться от применения UTF-7.
‰
ASCII кодирует 16-разрядные символы в ASCII-символы; то есть любой 16-
разрядный символ со значением меньше 0x0080 переводится в одиночный байт. 
Символы со значением больше 0x007F не поддаются этому преобразованию, и зна-
чение символа теряется. Для строк, состоящих из символов в ASCII-диапазоне (от 
0x00 до 0x7F), эта кодировка сжимает данные наполовину, причем очень быстро 
(поскольку старший байт просто отбрасывается). Данный код не годится для 
символов вне ASCII-диапазона, так как теряются значения символов.
Наконец, FCL позволяет кодировать 16-разрядные символы в произвольную 
кодовую страницу. Как и в случае с ASCII, это преобразование может привести к по-
тере значений символов, не отображаемых в заданной кодовой странице. Исполь-
зуйте кодировки UTF-16 и UTF-8 во всех случаях, когда не имеете дело со старыми 
файлами и приложениями, в которых применена какая-либо иная кодировка.
Чтобы выполнить кодирование или декодирование набора символов, сначала 
надо получить экземпляр класса, производного от 
System.Text.Encoding
. Аб-
страктный базовый класс 
Encoding
имеет несколько статических свойств, каждое 
из которых возвращает экземпляр класса, производного от 
Encoding
.
Пример кодирования и декодирования символов с использованием кодировки 
UTF-8:
using System;
using System.Text;
public static class Program {
public static void Main() {
// Кодируемая строка
String s = "Hi there.";
// Получаем объект, производный от Encoding, который "умеет" выполнять
// кодирование и декодирование с использованием UTF-8
Encoding encodingUTF8 = Encoding.UTF8;
// Выполняем кодирование строки в массив байтов
Byte[] encodedBytes = encodingUTF8.GetBytes(s);
// Показываем значение закодированных байтов
Console.WriteLine("Encoded bytes: " +
BitConverter.ToString(encodedBytes));
// Выполняем декодирование массива байтов обратно в строку
String decodedString = encodingUTF8.GetString(encodedBytes);
// Показываем декодированную строку
Console.WriteLine("Decoded string: " + decodedString);
}
}


394
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   283   284   285   286   287   288   289   290   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish