Проблемы с кодировкой при экспорте файла - PullRequest
1 голос
/ 16 сентября 2011

Я пытаюсь выяснить, что произошло в интеграционном проекте. Мы просто не можем получить кодировку прямо в конце.

Литовский файл был импортирован в as400. Там текст хранится в кодировке EBCDIC. Экспорт данных в файл ANSI, а затем прочитать как Windows-1257. ASCII-символы работают хорошо, а некоторые литовцы - хорошо, но остальные выглядят как дерьмо с символами ~, ¶ и].

Пример строки, идущей по трубе

Стартовый файл
Tuskulënö

AS400
Tuskulënö
EAA9A9596
34224335A

экспортированный файл (после преобразования в windows-1257)
Tuskulėnö

ожидаемый результат для экспортированного файла
Tuskulėnų

Есть идеи?

С уважением, Karl

1 Ответ

5 голосов
/ 16 сентября 2011

EBCDIC - не единственная кодировка, это семейство кодировок (в данном случае называемых кодовыми страницами), аналогично тому, как ISO-8859 - * - это семейство кодировок: кодировки внутри семейств имеют примерно половину кодов для «базовых» букв (примерно то, что присутствует в ASCII) и отличаются в другой половине.

Так что, если вы говорите, что он хранится в EBCDIC, вам нужно сообщить нам , какая кодовая страница используется.

Аналогичная проблема существует с ANSI: при использовании для кодировки это относится к кодировке Windows по умолчанию. К сожалению, кодировка по умолчанию для установки Windows может отличаться в зависимости от настроенной локали.

Итак, еще раз: вам нужно выяснить, какая именно кодировка используется здесь (обычно это из семейства Windows - *, "нормального" английского s Windows-1252 ).

Как только вы на самом деле знаете в какой кодировке у вас есть и хотите в каждой точке, вы можете перейти ко второму шагу: исправить его.

Мои личные предпочтения для такого рода проблем заключаются в следующем: имейте только один шаг для преобразования кодировок: возьмите все, что производит исходный инструмент, и преобразуйте его в UTF-8 в первый шаг. С этого момента всегда используйте UTF-8 для обработки этих данных. При необходимости преобразуйте UTF-8 в некоторую другую кодировку на последнем шаге (но по возможности избегайте этого).

...