2013-08-19 26 views
1

我使用的是Inno Setup 5.5.2(u),除了TStringList中的動態填充字符串外,所有符號都很好。我初始化列表和添加項目是這樣的:Inno Setup Unicode版本仍然不能正確顯示西里爾文

Regions := TStringList.Create; 
Regions.Add('Аврен'); 
Regions.Add('Айтос'); 
Regions.Add('Аксаково'); 
Regions.Add('Алфатар'); 
... 

,但他們獲得:

enter image description here

感謝您尋找到這一點。

+0

因爲Pascal Script編譯器不支持Unicode字符作爲輸入,所以您必須使用編碼的Unicode字符(#$ 0100格式)。 – TLama

+0

@TLama,感謝您關注此事。我無法理解一些東西。我在文檔中看到以下內容:「Unicode編譯器將類型'String'視爲Unicode字符串」。這與你所說的不矛盾嗎? –

+0

是的,它是Unicode字符串,但它不適用於源代碼中的常量。在文檔中還提到* Unicode編譯器使用的新RemObjects PascalScript版本支持Unicode,* ***,但不支持其輸入源***。 *這意味着它確實使用了Unicode字符串類型,但是* ***腳本中的任何文字Unicode字符將被轉換爲ANSI ***。這並不意味着您不能顯示Unicode字符串:例如,您可以使用編碼的Unicode字符來構建Unicode字符串(如S:=#$ 0100 +#$ 0101 +'Aa';)*。 – TLama

回答

4

此時您無法在Inno安裝程序中使用Unicode常量。在documentation有一個關於它的報價(由我強調):由使用

新的RemObjects PascalScript版本Unicode的編譯器 支持Unicode,而不是它的輸入源。這意味着它確實使用了 Unicode字符串類型,但 中的任何文字Unicode字符都將轉換爲ANSI。

這並不意味着不能顯示Unicode字符串:可以爲 例如代替使用編碼的Unicode字符建立的Unicode 串(如S:=#$ 0100 +#$ 0101 + 'AA'),或使用LoadStringsFromFile從 文件加載字符串,或使用{cm:...}常量。

因此,從什麼是寫在那裏,你可以編碼這些常量字符的格式如下:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Code] 
procedure InitializeWizard; 
var 
    Regions: TStringList; 
    ComboBox: TComboBox; 
    CustomPage: TWizardPage; 
begin 
    CustomPage := CreateCustomPage(wpWelcome, 'Caption', 'Description'); 
    ComboBox := TComboBox.Create(WizardForm); 
    ComboBox.Parent := CustomPage.Surface; 

    Regions := TStringList.Create; 
    try 
    Regions.Add(#$0410 + #$0432 + #$0440 + #$0435 + #$043D 
    Regions.Add(#$0410 + #$0439 + #$0442 + #$043E + #$0441 
    Regions.Add(#$0410 + #$043A + #$0441 + #$0430 + #$043A + #$043E + #$0432 + #$043E 
    Regions.Add(#$0410 + #$043B + #$0444 + #$0430 + #$0442 + #$0430 + #$0440 
    ComboBox.Items.AddStrings(Regions); 
    finally 
    Regions.Free; 
    end; 
end; 

或者你也可以從外部文件加載由建議LoadStringsFromFile功能區域的列表和輸出數組填充字符串列表(或直接組合框)。

或者您可以製作外部custom messages文件。

+0

這回答我的問題。非常感謝你。 –

+0

不客氣!無論如何,如果我是你,我會將這些值作爲每行的一個項目存儲(使用Unicode),並通過'LoadStringsFromFile'函數加載它們。 – TLama

+0

在一個平面文件中,創建地區,城市和學校之間的關係將會很困難(甚至不可能)。無論如何,我會再次考慮。再次感謝你。 –