Рассказ:
Я столкнулся со странной проблемой с Locale :: Maketext. Что-то превращает немецкий умлаутс в кодировку ISO-8859-1 при использовании
прагма "use utf8" в моем лексиконе.
Длинная история:
В моем веб-приложении все хранится в UTF-8:
- база данных
- файлы исходного кода
- HTML-тип документа
- и все остальное, насколько я могу сказать
Я использую Locale :: Maketext для L10N, и все мит-лексиконы определены в модулях Perl, которые хранятся в UTF-8 и
"использовать utf8". Все протестированные до сих пор языки (например, pt, pl, fr, en, zh, ko и др.) Работают нормально, за исключением языка de.
До тех пор, пока в лексиконе этого языка включено « use utf8 », что-то меняет немецкие умлауты (вероятно, все
нет 7-битного ASCII) в ISO-8859-1. У меня есть скрипт, который проверяет, что все в моем исходном дереве закодировано в UTF-8 (конечно, включая 7-битный ASCII).
Позвольте мне повторить: Если я уберу прагму «use utf8» для модуля MyApp :: L10N :: de, получающуюся кодировку после использования maketext в , мое приложение будет UTF-8 что хорошо. Пока модуль использует utf8 , кодировка превращается в ISO-8859-1 , в то время как все другие языки работают. Я отчаянно пытаюсь выяснить, почему, поскольку это не совсем соответствует тому, что я читал о прагме utf8.
Мой вопрос прост: почему это происходит? Как мне исправить это поведение, т. Е. Как мне заставить мое приложение работать с использованием utf8 в all исходные файлы?