* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Преобразование кодировки символов
8 февраля 2009
В .NET Framework для представления символов используется кодировка Unicode UTF-16, ставшая общепринятым стандартом. Она предоставляет уникальный код для каждого из более 65000 символов, существующих на данный момент, при этом остаются свободные коды еще для миллиона символов. Все это делает Unicode иде- альной кодировкой для многоязычного содержимого.
До появления Unicode необходимость поддержки разных языков вынуждала раз- работчиков применять для внутреннего представления данных различные кодиров- ки. В результате данные, отформатированные для различных культур, представле- ны в самых разных кодировках: однобайтовой для европейских языков, двухбайто- вой для азиатских и двунаправленной для ближневосточных языков. Это затрудня- ет обмен данными между культурами и еще больше — разработку приложений с многоязычным интерфейсом. .NET Framework позволяет преобразовывать данные из унаследованных форма- тов в формат Unicode, а при взаимодействии с унаследованными компонентами — из Unicode в унаследованные форматы. Преобразования выполняет класс Encoding из пространства имен System. Text. Эк- земпляр этого класса нельзя создать напрямую, но можно получить посредством метода Encoding. GetEncoding, объявленного с модификатором доступа Shared (static). Он возвращает объект кодировки, представляющий кодовую страницу, например: Visual Basic .NET Этот призер предполагает наличие оператора Imports System.Text Din myEncoding As Encoding Кодовая страница 932 представляет японские иероглифы. myEncoding = Encoding.GetEncoding(932) Visual C# // Этот пример предполагает наличие оператора using System.Text Encoding myEncoding; // Кодовая страница 932 представляет японские иероглифы, myEncoaing = Encoding.GetEncoding(932); Созданный экземпляр класса Encoding годится для преобразования символов из этой кодировки в Unicode и обратно. Чтобы выполнить преобразование существу- ющих данных в Unicode, вызовите метод Encoding. Convert, передав ему объекты ис- ходной и целевой кодировок, а также массив байт, представляющий данные в ис- ходной кодировке. Этот метод возвращает массив байт, представляющих данные в целевой кодировке. Для преобразования в Unicode в качестве объекта целевой ко- дировки следует передать экземпляр класса System. Text. UnicodeEncoding. Следующий пример демонстрирует преобразование данных из кодовой страницы 932 в Unicode: Visual Basic .NET Этот пример предполагает наличие оператора Imports System.Text. Исходные данные представлены массивом типа Byte. хранящимся в переменной myData, Dim tgtDataO As Byte Dim srcEncoding As Encoding Dim tgtEncoding As New UnicodeEncodingO Кодовая страница 932 представляет японские иероглифы. srcEncoding - Encoding.GetEncoding(932) Теперь переменная tgtData содержит массив байтов, идентичный массиву myData, но закодированный в формате Unicode. tgtData - Encoding.Convert(srcEncoding, tgtEncoding, myData) Visual C# // Этот пример предполагает наличие оператора using System.Text, // Исходные данные представлены массивом типа Byte, // хранящимся в переменной myData. byte[] tgtData; Encoding srcEncoding; UnicodeEncoding tgtEncoding = new UnicodeEncodingO; // Кодовая страница 932 представляет японские иероглифы. srcEncoding - Encoding.GetEncoding(932); // Теперь переменная tgtData содержит массив байтов, идентичный // массиву myData, но закодированный в формате Unicode. tgtData - Encoding.Convert(srcEncoding, tgtEncoding, myData); Чтобы преобразовать данные в унаследованном формате в массив байтом для дальнейшей обработки, вызовите метод GetBytes, передав ему объект исходной ко- дировки — в результате создается на основе символьного или строкового массива создается массив байтов: Visual Basic .NET ' Этот пример предполагает наличие оператора Imports System.Text. 1 Переменная myString содержит данные в унаследованном формате. Dim myEncoding As Encoding myEncoding - Encoding.GetEncoding(932) Dim myBytes() As Byte myBytes - myEncoding.GetBytes{myString) Visual C# // Этот пример предполагает наличие оператора using System.Text. // Переменная myString содержит данные в унаследованном формате. Encoding myEncoding; myEncoding = Encoding.GetEncoding(932); Byte[] myBytes; myBytes = myEncoding.GetBytes(myString); Метод GetChars позволяет преобразовать массив байтов в символьный массив, например: Visual Basic .NET ' Этот пример предполагает наличие оператора Imports System.Text. 1 Исходные данные находятся в массиве myBytes, Dim myEncoding As New UnicodeEncoaingO Dim myChars() As Char myChars = myEncoding.GetChars(myBytes) Visual C# // Этот пример предполагает наличие оператора using System.Text. // Исходные данные находятся в массиве myBytes. UnicodeEncoding myEncoding = new UnicodeEncodingO; char[] myChars; myChars = myEncoding.GetChars(myBytes);