Что такое кодовые страницы Windows? - PullRequest
2 голосов
/ 06 апреля 2010

Я пытаюсь получить общее представление о том, что подразумевается под кодовой страницей Windows. Я как будто чувствую, что это перевод между данным 8-битным значением и некоторой «абстракцией» для заданного графического символа.

Я провел следующий эксперимент. Я создал символьный литерал "" с двумя версиями буквы u с умлаутом. Один создан с использованием значения ALT 129 (использует кодовую страницу 437), а другой - с использованием значения ALT 0252 (использует кодовую страницу 1252). Когда я изучал литерал, оба символа имели значение 252.

Является ли 252 универсальной 8-битной абстракцией для вас с умлаутом? Это значение Unicode?

Помимо ввода с клавиатуры, есть ли какие-либо библиотечные процедуры или системные вызовы, использующие кодовые страницы? Например, есть ли функция для перевода строки с использованием заданной кодовой таблицы (как указано выше для значения ALT 129)?

Ответы [ 4 ]

3 голосов
/ 06 апреля 2010

Кодовые страницы Windows являются пережитком дней, предшествующих юникоду, когда языки с разными символами все еще пытались бы представить их, используя один (или два в случае азиатских) байтов. Это где концепция набора символов вступает в игру. Например, английский - «windows-1252». Различные кодовые страницы можно установить через панель управления «Язык и региональные стандарты». Список кодовых страниц можно найти здесь - http://msdn.microsoft.com/en-us/goglobal/bb964654.aspx

В .NET доступ к кодовым страницам осуществляется через класс System.Text.Encoding. Это обеспечивает метод для преобразования из одной кодовой страницы в другую. Например, чтобы преобразовать строку в windows-1252 в utf8 (обычно это довольно бессмысленное упражнение), вы можете использовать этот код:

using System.Text;

public string GetUtf8StringFromDefaultEncoding(string target, string codePage) {
     Encoding windows = Encoding.GetEncoding(codePage);
     byte[] windowsBytes = windows.GetBytes("Hello World");
     string utf8String = new UTF8Encoding().GetString(windowsBytes);
     return utf8String;
}

public static void Main() {
     Console.Out.WriteLine(GetUtf8StringFromDefaultEncoding("Hello World", 
                           "windows-1252"));
}
1 голос
/ 06 апреля 2010

Здесь - это обязательное для чтения объяснение Юникода и наборов символов (включая кодовые страницы ) от Джоэла Спольски

1 голос
/ 06 апреля 2010

Кодовая страница Windows аналогична кодовому набору, такому как ISO 8859-1. Он отображает определенные числа (как символы хранятся на диске) в определенные символы (символы, как они отображаются на экране, абстрактно). Он не соответствует шрифту напрямую - хотя шрифт может поддерживать данный кодовый набор или кодовую страницу. Например, шрифты Courier New и Times Roman можно использовать для отображения CP1252, и они выглядят по-разному на экране, даже если данные на диске могут быть одинаковыми.

Первые 256 кодовых точек Unicode такие же, как кодовые точки ISO 8859-1. В ISO 8859-1 кодовая точка 252 (0xFC) - это ЛАТИНСКИЙ МАЛЕНЬКИЙ БУКВЫ U С ДИАРЕЗОМ (разговорный, u-with-umlaut или 'ü').

Есть функции преобразования набора кодов; ICU поддерживает некоторые из них. Я не сомневаюсь, что есть конвертеры кодовых наборов для Windows. Я просто не знаю, как их зовут. Частично это будет зависеть от того, какой язык (языки) вы используете.

0 голосов
/ 06 апреля 2010

Кодовая страница Windows - это средство для перевода 8-битного значения в символ. Большинство компьютеров с Windows в США используют Windows-1252 .

Более новые программы Windows обычно используют UTF-8 для хранения текстовых файлов и внутреннего использования широких строк, которые UTF-16 . Это устраняет проблемы с кодовой страницей, поэтому текстовый файл, написанный на Венгрии, при открытии в США будет выглядеть одинаково.

...