Windows 1252 является подмножеством UTF-8 или нет?

Я просто хочу знать, является ли Windows 1252 подмножеством UTF-8 или нет? а в чем отличия?

Подумываете о переносе моей БД из windows 1252 в UTF-8, есть мысли, мнения?

3 ответа

Windows-1252 является подмножеством UTF-8 с точки зрения "какие символы доступны", но не с точки зрения их побайтного представления. Windows-1252 имеет символы между байтами 127 и 255, для которых в UTF-8 используется другая кодировка.

Любой видимый символ в диапазоне ASCII (127 и ниже) кодируется 1:1 в UTF-8.

Таким образом, хотя вы можете конвертировать между ними, строка CP-1252 не обязательно является допустимой строкой UTF-8.

Да, символы Windows 1252 являются подмножеством Unicode.

Unicode, по замыслу, реализует преобразование без потерь назад и вперед из большинства (распространенных) кодировок символов, доступных в 1993 году. CP-1252 старше, чем Unicode, и часто используется, поэтому Unicode был разработан для включения всех CP-1252.

Этот дизайн был задан для вашего случая: вы можете конвертировать один слой за раз, не теряя информацию, поэтому без необходимости отмечать день флага. Вы просто конвертируете базу данных, но и настраиваете клиента [драйвер] для перевода обратно в CP-1252. (Обычно это значение по умолчанию, клиенты знают, какую кодировку вы ожидаете, и они знают, какая база данных будет доставлена, поэтому она будет выполнять транскодирование). На втором шаге вы можете изменить клиентскую часть (и, возможно, позже интерфейс).

Просто вам следует позаботиться о некоторых проблемах: Unicode имеет различную каноническую форму и гораздо более возможное представление для одного и того же символа. С CP-1252 это не проблема, но на обратном пути у вас могут быть проблемы, в зависимости от используемой вами библиотеки. Если вам нужно преобразовать обратно, просто сделайте несколько экспериментов.

Многие коды одинаковы в Unicode и в CP-1252, но для кодирования UTF-8 требуется два (или более) байта для кодов около 127, поэтому они не совместимы между байтами. Но обычно достаточно простой справочной таблицы (256 элементов).

Непечатные символы в теории одинаковы, но каждая система может изменить интерпретацию (например, новую строку и подачу формы [новая страница или теперь часто новый раздел]) или все escape-последовательности (начиная с ^[). Но это не очень важно для вас.

Анси против Utf8 в emacs hexl-режиме. Таким образом, Cr 43 72, но есть e с акцентом - é. В ansi это e9, а в utf8 это c3 a9. Тогда a равно 61. Файл utf8 также имеет свою спецификацию или кодировку в начале, ef bb bf.

         43 72    e9 61      Cr.a

ef bb bf 43 72 c3 a9 61  ...Cr..a 
Другие вопросы по тегам