2012-04-17 70 views
0

在某些機器上,我的NSIS安裝程序創建一個錯誤字符的文件夾。NSIS安裝程序使用錯誤的字符集創建目錄

的NSIS本來是要創建ń焦炭

// U+0144 ń c5 84 LATIN SMALL LETTER N WITH ACUTE 

的文件夾,而是創建一個文件夾ñ焦炭

// U+00F1 ñ c3 b1 LATIN SMALL LETTER N WITH TILDE 

有線部分僅在一些情況機器和我無法重現。據我所知,這是隻有Windows Vista(可能是基本版)的報道。

我懷疑這與Windows-1250到UTF轉換有關。由於NSIS仍不支持UTF,因此我使用Windows-1250編碼的腳本文件。 字符是0xF1,應翻譯爲UTF U+c584,但安裝程序會創建帶有U+c3b1 char的文件夾。另一方面,U+c3b1相當於Windows-1252 0xF1

編譯安裝程序運行時,什麼可能會影響NSIS腳本中使用的字符的解釋?如何確保預期的轉換0xF1 =>U+c584

+0

爲了說清楚 - 我不想使用uNSIS分支,因爲它仍然存在一些未解決的問題。我耐心等待官方NSIS 2.50發佈。和男孩,我從2009年開始等待! – SiliconMind 2012-04-17 10:14:02

+1

你有什麼未解決的問題與NSISU?我沒有遇到任何問題;這是我們現在在PortableApps.com上使用的所有內容。 – 2012-04-17 10:47:05

回答

0

NSIS源腳本的編碼並不真正決定最終的字符串,因此腳本/安裝程序中的字節轉換爲unicode字符串會發生在最終用戶系統上,因此ASCII以外的字符可能會根據系統默認值代碼頁(Language for non-Unicode programs (System Locale))。

您可以嘗試爲此目錄名稱創建自定義LangString。爲了達到這個目的,你必須在輸入Ñ時將編輯器的代碼頁設置爲有問題的代碼頁。您可以通過在.onInit和StrCpy中檢查$ LANGUAGE(或使用System::Call kernel32::GetACP()i.r0並檢查$ 0)來模擬此操作,該字符串可以在此係統上正確轉換爲有問題的變量。

下一個NSIS版本可能是v3.0,我不知道你從哪裏得到2.50,但它可能只是一個由unicode fork使用的佔位符。

+0

我開始懷疑我們會看到下一個NSIS發佈。 2.50的版本號來自NSIS文檔,它似乎比官方發佈的版本要早:http://nsis.sourceforge.net/Docs/Chapter1.html#1.4 - 這些甚至指的是工作unicode支持。 – SiliconMind 2012-04-19 09:22:40

+0

@SiliconMind:在線文檔來自SVN主幹。你可以從trunk中編譯一個工作的unicode版本,但它與fork非常相似,所以你可以使用它。 – Anders 2012-04-19 15:39:17