Моя программа Delphi не возвращает правильные символы. SetThreadLocale for the entire Delphi application - это контекст моей проблемы. Я использую Firebird 1.5 charset NONE database, которая содержит данные WIN1257. Я использую Delphi 10 Seattle IBX для извлечения данных из этой базы данных. Обычно я использую свою программу в Windows с одним из балтийских языков для программ, отличных от Юникода. Но иногда мне нужно запустить мою программу на Windows с русской локалью (набор символов WIN1251).Delphi - преобразование между наборами символов - объяснение и как это сделать?
И я застрял со следующей проблемой: поле VARCHAR база данных содержит символ ā
, который извлекается в Delphi код (fieldname.asString), как \u0101
, когда программа запускается с Балтийским локали, но retrievied (fieldname.asString) как \u0432
, когда программа запускается с русским языком, но мне нужно, чтобы она отображалась как \u0101
в русском случае.
Я попытался установить все параметры соединения в TIBDatabase, но не смог достичь своей цели. Итак, теперь у меня есть идея сделать перевод: я могу обнаружить, что программа работает под русским языком, и в этом случае я могу применить специальную функцию преобразования, такую как MyConvert(fieldname.asString)
, чтобы преобразовать \u0432
в \u0101
и что-то вроде этого для всех персонажей.
Вопрос: есть ли такая функция преобразования и как ее использовать? Каков алгоритм, определяющий биекцию \u0432
< ->\u0101
?
Перенос в базу данных юникода не является моим вариантом.
Текущий вопрос пытается решить ту же самую проблему с SetThreadLocale for the entire Delphi application, но с другой подход. Мне не удалось установить языковой стандарт для моего приложения, и поэтому я решил сделать преобразование символов, и этот вопрос - как это сделать?
Добавлено:https://en.wikipedia.org/wiki/Windows-1251 и https://en.wikipedia.org/wiki/Windows-1257 палитр показывают, что a
имеет положение E2, и это положение в обеих палитрах имеют разные, но известно, символы Unicode, поэтому отображение известно и не существует единой формулы, как выразить это, она должна делается персонаж по характеру основа.
Отвергая Unicode кажется безрассудным –