Поддержка языка пользователя в Delphi 7 - PullRequest
0 голосов
/ 07 ноября 2011

Моя программа написана на Delphi 7 , и я хочу избегать русской или китайской, корейской попыток использовать мою программу, поскольку пути к файлам содержат символы Unicode, и моя программа пока не может их обработатьпоскольку я не переношу свою программу на новую версию Delphi, поддерживающую UNICODE).

Как мне написать функцию, обнаруживающую "язык Unicode" в Delphi 7?

1 Ответ

5 голосов
/ 07 ноября 2011

Программа Delphi 7 (в своей части VCL) может без проблем обрабатывать русские, китайские или корейские символы.

Если системный язык Windows установлен правильно, кодировка будет соответствоватьсоответствующая кодировка и имена файлов будут иметь символы Unicode, доступные в этой кодировке.Фактически, string=AnsiString по умолчанию преобразуется в Unicode, когда VCL вызывает API-интерфейсы Windows (все вызовы ....A() будут выполнять преобразование, а затем вызывать ....W() версию).

Вы можете принудительно установить по умолчанию.кодовая страница (та, которая выберет кодировку для использования) путем вызова кода , например, :

if GetThreadLocale<>LCID then // force locale settings if different
  if SetThreadLocale(LCID) then
    GetFormatSettings; // resets all locale-specific variables

В этом случае TFileName (= AnsiString) в текущей системной кодировке Windows будет преобразована в соответствующие символы Unicode, и вы сможете использовать ее в своем приложении Delphi 7.

Что вы не можете сделать со стандартным VCL AnsiStringиспользуйте его для непосредственного смешивания кодировок , как вы можете с Delphi 2009, благодаря новой string = UnicodeString стандартной парадигме.

PS:

Поскольку CharSet включает только символы # 128 .. # 255 (т.е. все с установленным битом 7), если вы используете только символы # 0 .. # 127, ваша строка будет согласованной независимо от текущей настройки charset / кодовой страницы.Если вы используете только английские символы и цифры, например, ваш путь всегда будет работать, независимо от кодировки / кодовой страницы.Но если вы используете не английские символы, путь будет работать только в том случае, если правильно задана кодовая страница / кодовая страница, что относится к пути, используемому конечным пользователем (например, TOpenDialog во время выполнения).

...