locked
Как производить преобразование между байтами и символами? Как работают кодировки? RRS feed

  • Общие обсуждения

  • Как известно, представители класса String состоят из символов Юникода, которые можно представить в различных кодировках.

     

    Внутри наш класс String использует UTF-16 LE (Unicode Transformation Format с 16-разрядным представлением и прямым – little endian – порядком байтов). При преобразовании строк или символов в байты для сохранения в файл, можно выбирать различные кодировки, или способы представления символа в байтах. Одна из первых кодировок называлась ASCII и определяла 128 содержательных значений символов. Со временем были добавлены другие кодовые страницы ANSI, сопоставлявшие старшие 128 значений байта символам разными способами, в зависимости от используемой страницы кода, а некоторые могли даже использовать несколько байтов для представления символов Юникода. Обычно именно их представляют себе те, кто говорит о текстовых файлах, поскольку старые решения языка C, в которых принималось, что символ равен 1 байту, повлияли на общие представления о текстовых файлах. Однако эти кодовые страницы ANSI не могут представить весь спектр символов Юникода. Кроме того, не все кодовые страницы ANSI установлены на всех компьютерах и в каждой локализованной версии операционной системы кодовая страница ANSI по умолчанию может быть разной. Так что «Блокнот» может, например, сохранять файлы, которые все японские компьютеры читать будут, а американские – нет.

     

    Решением является использование таких кодировок, как UTF-16 (System.Text.UnicodeEncoding) или UTF-8 (System.Text.UTF8Encoding). Они каждому символу сопоставляют один или более байтов, либо наоборот, а также позволяют представить все символы Юникода, включая символы-заместители (surrogate), которые составляют дополнительный миллион знаков, за пределами базовой многоязыковой плоскости.


    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 0:58 MSDN Forums consolidation (От:Форум по .NET Framework)
    18 февраля 2010 г. 12:23
    Модератор