Как хранить данные Unicode в формате, который не поддерживает UTF-8 - PullRequest
4 голосов
/ 03 июля 2010

Хорошо, вот еще один вопрос о кодировке символов, демонстрирующий мое незнание всего, что связано с Unicode.

Я читаю данные из файлов Microsoft Excel .xls и сохраняю их в шейп-файлах ESRI .shp.Для версий Excel> 5.0 текст в файлах Excel хранится как Unicode.Тем не менее, Unicode (и, в частности, UTF-8 поддержка шейп-файлов несовместима , и поэтому я думаю, что мне вообще не следует его использовать. Однако шейп-файлы действительно поддерживают кодовые страницы старой школы.

Что такоенаилучшая практика в ситуации, когда вы должны преобразовать строку Unicode в строку в неизвестной, но определенной кодовой странице?

Насколько я понимаю, строка Unicode может включать символы из нескольких "кодовых страниц".следовательно, я должен каким-то образом оценить «лучшую» кодовую страницу для использования, а затем преобразовать все неподдерживаемые символы в их ближайшее приближение в этой кодовой странице (или страшно ?). Это обычный подход?

Я определенно могу использовать больше, чем , только системную кодовую страницу. Поскольку .shp файлы используют файлы .dbf для хранения своих атрибутных данных, по крайней мере все кодовые страницы, указанные в формате .dbf, должны поддерживаться.(см. описание формата xBase ). Поддерживаемые кодовые страницы: DOS USA, DOS Multilingual, Windows ANSI, Standard Macintosh, EE MS-DOS, Nordic MS-DOS, Russian MS-DOS, Icelandic MS-DOS, Kamenicky (Czech) MS-DOS, Mazovia (Polish) MS-DOS, Greek MS-DOS (437G), Turkish MS-DOS, Russian Macintosh, Eastern European Macintosh, Greek Macintosh, Windows EE, Russian Windows, Turkish Windows, Greek Windows

Кроме того, некоторые приложения поддерживают использование файла *.cpg, в котором указываются дополнительные кодовые страницы для использования (хотя я понимаю поддержку utf-8, и яПодозреваю, что многие другие кодовые страницы ограничены).

Поскольку я пытаюсь разработать инструмент общего назначения, я не могу ничего предположить о содержимом Unicode в файлах .xls.

Ответы [ 2 ]

1 голос
/ 04 июля 2010

Какова лучшая практика в ситуация, когда вы должны преобразовать Юникод строка в строку в неизвестная, но конкретная кодовая страница?

Зависит от формата файла. Если он поддерживает «escape-последовательности» Unicode, такие как XML € или JSON \u20AC, используйте их, и вы не потеряете никакой информации. Если нет, требуется другой подход.

Поэтому я бы предположил, что должен как-то оценить «лучшую» кодовую страницу использовать,

Как правило, в системе, не поддерживающей Юникод, вы должны конвертировать символы в любую кодировку по умолчанию, а не в произвольную кодовую страницу.

Редактировать : Таким образом, у вас есть выбор кодовых страниц:

01h     DOS USA                      code page 437
6Ah     Greek MS-DOS (437G)          code page 737
02h     DOS Multilingual             code page 850
64h     EE MS-DOS                    code page 852
6Bh     Turkish MS-DOS               code page 857
67h     Icelandic MS-DOS             code page 861
65h     Nordic MS-DOS                code page 865
66h     Russian MS-DOS               code page 866
C8h     Windows EE                   code page 1250
C9h     Russian Windows              code page 1251
03h     Windows ANSI                 code page 1252
CBh     Greek Windows                code page 1253
CAh     Turkish Windows              code page 1254
04h     Standard Macintosh           code page 10000
98h     Greek Macintosh              code page 10006
96h     Russian Macintosh            code page 10007
68h     Kamenicky (Czech) MS-DOS
69h     Mazovia (Polish) MS-DOS
97h     Eastern European Macintosh

Чтобы выбрать кодовую страницу, я бы порекомендовал:

  1. Проверьте, не содержат ли ваши данные ASCII. Если так, то не имеет значения, какую кодовую страницу вы выберете.
  2. Если нет, попробуйте найти кодовую страницу, которая может точно представлять ваши данные (или, если вы не можете, ту, которая минимизирует непредставимые символы). Попробуйте сначала кодовую страницу 1252, затем другие 125x кодовые страницы. Не беспокойтесь о кодовых страницах DOS, если у вас нет символов для рисования прямоугольников.

и затем конвертировать все неподдерживаемые персонажи в своих ближайших приближение в этой кодовой странице (или страшно?) Это обычный подходит?

Это подход, который мы применяем на работе, когда нам нужно преобразовать файл UTF-8 в windows-1252 или в EBCDIC. Я использовал Unidecode, чтобы помочь генерировать «ближайшие приближения».

Однако мы заменяем только буквы и цифры, а не знаки препинания. Замена «» на «» сломает несколько форматов файлов.

1 голос
/ 03 июля 2010

На каком языке ваш текст? Если символы в основном ASCII, вероятно, лучше написать оригинальный текст в кодировке UTF-8 как таковой. Программа, не поддерживающая UTF-8, по-прежнему будет правильно читать текст ASCII и отображать искаженный ASCII для неизвестных символов.

...