Значения Юникода в реестре (Inno Setup 5) - PullRequest
0 голосов
/ 02 мая 2018

Мне нужно иметь возможность хранить определенные символы Юникода в нескольких моих ключах реестра, но я не могу найти синтаксис для этого в файле .iss. Я использую версию Inno Setup для Unicode

На сайте Inno Setup об этом говорится о значениях Unicode:

вы можете, например, вместо этого использовать закодированные символы Unicode для построения строк Unicode (например, S := #$0100 + #$0101 + 'Aa';), или загрузить строку из файла, используя LoadStringsFromFile, или использовать константу {cm:...}.

Например, я хочу ввести символ градуса Фаренгейта (), который #$2109.

Я не могу поместить #$2109 непосредственно в строку значения, потому что это просто печатает этот текст. Я пытался создать константу #define, но она не распознает символы # и $.

Итак, я хочу:

[Registry]
Root: HKLM; Subkey: "MyPath"; ValueType string; ValueName: "MyName; \
    ValueData: "Temperature [℉]"

но, очевидно, я не могу вставить его напрямую.

Как я могу получить символы Unicode в раздел реестра, напрямую или через некоторую переменную / константу, я довольно новичок в Inno Setup.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Просто убедитесь, что ваш .iss файл UTF-8, закодированный с помощью спецификации .

Затем вы можете использовать строки UTF-8 непосредственно в нем (с версией Inno Setup для Unicode), как сказано в документации :

Unicode Inno Setup поддерживает файлы .iss в кодировке UTF-8 (но не UTF-16).

[Registry]
Root: HKLM; Subkey: "MyPath"; ValueType: string; ValueName: "MyName"; \
    ValueData: "Temperature [℉]"

(обратите внимание, что синтаксис ввода в вашем вопросе неверен, вам не хватает двоеточия и кавычки)

enter image description here


Простой способ сохранить файл в UTF-8 с спецификацией:

  • Откройте файл .iss в графическом интерфейсе Inno Setup Compiler.
  • Перейдите в Файл> Сохранить кодировку и выберите UTF-8 .
  • Сохраните файл.

Вам нужно сделать это перед вставкой строки UTF-8. Также обратите внимание, что редактор Inno Setup Compiler не может отображать , но он все равно будет работать нормально при компиляции.


Другой способ:

  • Откройте файл .iss в Блокноте Windows.
  • Перейти к Файл> Сохранить как .
  • Выберите UTF-8 в Кодировка раскрывающийся список.
  • Нажмите Сохранить .

Блокнот Windows может отображать (с соответствующим шрифтом, как по умолчанию Consolas или Lucida Console ).

0 голосов
/ 03 мая 2018

Простой способ - написать то, что вам нужно, в Блокнот ++. например : Температура + (ALT + 2109) //

enter image description here

  • Установите кодировку UTF-8 без спецификации
  • выделение всей строки и ( Ctrl + C ) копирование
  • вставить в ValueData скопированную строку "Температура [?]"

[Registry]
Root: ... ValueType: string; ValueName: "AString"; ValueData: "Temperature [?]"

Вот и все



В другом решении мы используем константу и функцию:

FHcnst1 =  #$2109#$20#$54#$65#$6D#$70; // ℉ Temp

и мы складываем вместе ( ℉ Температура постоянная )

℉ Temp
константность

... ValueType: string; ValueName: "AConst"; ValueData: "{code:SetTemperature|1}erature Const"

Функция «Задать температуру»

[Code]
var
  UserPage: TInputQueryWizardPage;
  UsagePage: TInputOptionWizardPage;
  DataDirPage: TInputDirWizardPage;
const
  FHcnst1     = #$2109#$20#$54#$65#$6D#$70; // ℉ Temp
  FHcnst2     = #$2109#$20;
...
function SetTemperature(Param: String): String;
begin 
    if Param = '1' then Result := FHcnst1;
    if Param = '2' then Result := FHcnst2;
end;

Результат:

enter image description here

Взломать:
Вы должны записать в реестр три байта. Только Unicode # $ 2109 не будет работать.

Хороший - это пространство $ 20 (потому что невидимое)

FHcnst2     = #$2109#$20;
...