Delphi Berlin Unicode Issue - PullRequest
       74

Delphi Berlin Unicode Issue

1 голос
/ 06 января 2020

У меня очень странная проблема Delphi, связанная с компилятором символов Unicode.

У меня есть модуль с таким определением const:

const SLANG_SPANISH_ESP = 'Español';

Когда я компилирую это на своем P C, ñ конвертируется в эквивалент ASCII. Я использовал шестнадцатеричный просмотрщик для проверки соответствующих файлов:

В исходном файле pas, ñ кодируется в UTF-8 как C3 B1.

В созданном файле DCU ñ кодируется в ASCII (?) Как F1.

Все остальные Delphi ПК в нашей группе по-разному компилируют DCU, генерируя файл DCU с ñ, закодированным в UTF-8 как C3 B1.

Это только один пример, но многие персонажи, не относящиеся к ASCII, постигают одну и ту же участь.

В последние пару дней я изо всех сил пытался определить причину, но безуспешно. Я удалил файлы проекта и исходный код, так как мы используем SVN. Я дважды проверил, вручную скопировав папку проекта из P C.

коллеги. Я просмотрел настройки Delphi на то, что может повлиять на это, но безуспешно.

Это очень расстраивает и волнует, что один и тот же исходный код на разных компьютерах компилируется с разными результатами. Теперь я надеюсь, что кто-нибудь из сообщества сможет дать мне подсказку.

1 Ответ

1 голос
/ 17 января 2020

Я наконец дошел до сути этого вопроса. Оказывается, что рассматриваемый файл pas не был сохранен как UTF-8, несмотря на то, что IDE сообщал мне. На самом деле это известная проблема с Delphi, когда устройство сохраняется с символами UTF-8, но без спецификации.

Вы можете обратиться к блогу Марко Канту по этому вопросу: Файлы Delphi компилятора и кодированного UTF-8 исходного кода без спецификации

Причина, по которой файл не было спецификации, потому что она была сгенерирована с использованием собственного инструмента. С тех пор этот инструмент был обновлен для вывода спецификации.

Наконец, я обнаружил, что на данном компьютере сборка проекта с помощью IDE или извне с помощью MsBuild.exe может привести к другим результатам. Среда IDE правильно интерпретирует блок как UTF-8, тогда как MsBuild.exe интерпретирует блок как Ansi.

...