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



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


Глава.14 .Символы,.строки.и.обработка.текста
Вот результат выполнения этой программы:
Encoded bytes: 48-69-20-74-68-65-72-65-2E
Decoded string: Hi there.
Помимо 
UTF8
, у класса 
Encoding
есть и другие статические свойства: 
Unicode

BigEndianUnicode

UTF32

UTF7

ASCII
и 
Default
. Последнее возвращает объект, 
который выполняет кодирование и декодирование с учетом кодовой страницы 
пользователя, заданной с помощью утилиты Regional and Language Options (Язык 
и региональные стандарты) панели управления (см. описание Win32-функции 
GetACP
). Однако свойство 
Default
применять не рекомендуется, потому что по-
ведение приложения будет зависеть от настройки машины, то есть при изменении 
кодовой таблицы, предлагаемой по умолчанию, или выполнении приложения на 
другой машине приложение поведет себя иначе.
Наряду с перечисленными свойствами, у 
Encoding
есть статический метод 
GetEncoding
, позволяющий указать кодовую страницу (в виде числа или строки). 
Метод 
GetEncoding
возвращает объект, выполняющий кодирование/декодирование, 
используя заданную кодовую страницу. Например, можно вызвать 
GetEncoding
с параметром 
"Shift-JIS"
или 932.
При первом запросе объекта кодирования свойство класса 
Encoding
(или его 
метод 
GetEncoding
) создает и возвращает объект для требуемой кодировки. При 
последующих запросах такого же объекта будет возвращаться уже имеющийся 
объект; то есть при очередном запросе новый объект не создается. Благодаря этому 
сокращается число объектов и снижается нагрузка на кучу.
Кроме статических свойств и метода 
GetEncoding
класса 
Encoding
, для созда-
ния экземпляра класса кодирования можно задействовать классы 
System.Text.
UnicodeEncoding

System.Text.UTF8Encoding

System.Text.UTF32Encoding

System.
Text.UTF7Encoding
или 
System.Text.ASCIIEncoding
. Только помните, что в этих 
случаях в управляемой куче появятся новые объекты, что неминуемо отрицательно 
скажется на производительности.
У классов 
UnicodeEncoding

UTF8Encoding

UTF32Encoding
и 
UTF7Encoding
есть 
несколько конструкторов, дающих дополнительные возможность в плане управле-
ния процессом кодирования и 
маркерами последовательности байтов
(Byte Order 
Mark, BOM). Первые три класса также имеют конструкторы, которые позволяют 
заставить класс генерировать исключение при декодировании некорректной по-
следовательности байтов; эти конструкторы нужно использовать для обеспечения 
безопасности приложения и защиты от приема некорректных входных данных.
Возможно, при работе с 
BinaryWriter
или 
StreamWriter
вам придется явно соз-
давать экземпляры этих классов. У класса 
ASCIIEncoding
лишь один конструктор, 
и поэтому возможности управления кодированием здесь невелики. Получать объ-
ект 
ASCIIEncoding
(точнее, ссылку на него) всегда следует путем запроса свойства 
ASCII
класса 
Encoding
. Никогда не создавайте самостоятельно экземпляр класса 
ASCIIEncoding
— при этом создаются дополнительные объекты в куче, что отри-
цательно сказывается на производительности.


395
Кодировки:.преобразования.между.символами.и.байтами
Вызвав для объекта, производного от 
Encoding
, метод 
GetBytes
, можно преоб-
разовать массив символов в массив байтов. (У этого метода есть несколько пере-
груженных версий.) Для обратного преобразования вызовите метод 
GetChars
или 
более удобный 
GetString
. (Эти методы также имеют несколько перегруженных 
версий.) Работа методов 
GetBytes
и 
GetString
продемонстрирована в приведенном 
ранее примере.
У всех типов, производных от 
Encoding
, есть метод 
GetByteCount
, который, не 
выполняя реального кодирования, подсчитывает количество байтов, необходимых 
для кодирования данного набора символов. Он может пригодиться для выделе-
ния памяти под массив байтов. Имеется также аналогичный метод 
GetCharCount

который возвращает число подлежащих декодированию символов, не выполняя 
реального декодирования. Эти методы полезны, когда требуется сэкономить память 
и многократно использовать массив.
Методы 
GetByteCount
и 
GetCharCount
работают не так быстро, поскольку для 
получения точного результата они должны анализировать массив символов/байтов. 
Если скорость важнее точности, вызывайте 
GetMaxByteCount
или 
GetMaxCharCount
— 
оба метода принимают целое число, в котором задается число символов или байтов 
соответственно, и возвращают максимально возможный размер массива.
Каждый объект, производный от 
Encoding
, имеет набор открытых неизменяе-
мых свойств, дающих более подробную информацию о кодировании. Подробнее 
см. описание этих свойств в документации на .NET Framework SDK.
Чтобы продемонстрировать свойства и их назначение, я написал программу, 
в которой эти свойства вызываются для разных вариантов кодирования:
using System;
using System.Text; 
public static class Program {
public static void Main() {
foreach (EncodingInfo ei in Encoding.GetEncodings()) {
Encoding e = ei.GetEncoding();
Console.WriteLine("{1}{0}" +
"\tCodePage={2}, WindowsCodePage={3}{0}" +
"\tWebName={4}, HeaderName={5}, BodyName={6}{0}" +
"\tIsBrowserDisplay={7}, IsBrowserSave={8}{0}" +
"\tIsMailNewsDisplay={9}, IsMailNewsSave={10}{0}",
Environment.NewLine,
e.EncodingName, e.CodePage, e.WindowsCodePage,
e.WebName, e.HeaderName, e.BodyName,
e.IsBrowserDisplay, e.IsBrowserSave,
e.IsMailNewsDisplay, e.IsMailNewsSave);
}
}
}
Вот результат работы этой программы (текст сокращен для экономии бумаги):


396
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   284   285   286   287   288   289   290   291   ...   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