簡體   English   中英

NSIS 中的“ANSI 編碼”是什么?

[英]What is "ANSI encoding" in NSIS?

我有一個使用NSIS 3.x安裝的應用程序。 安裝程序將路徑存儲在文件中,應用程序稍后會檢查該路徑。 使用FileWrite寫入路徑function; FileWrite文檔說明如下:

將 ANSI 字符串寫入使用 FileOpen 打開的文件。 如果發生寫入錯誤,錯誤標志將被設置。

(如果您正在構建 Unicode 安裝程序,則 function 會進行適當的轉換並寫入 ANSI 字符串)

我知道 ANSI 是一個松散定義的術語(請參閱 此問題及其許多答案)。 有沒有辦法找出這個 NSIS function 使用的實際編碼是什么,以便我以后可以從應用程序中正確讀取生成的文件?

就是ANSI的Windows的意思; 它是當前活動/默認的 Windows 代碼頁。

在 NSIS v3 之前,NSIS 始終是“ANSI”。 它調用了所有 API 函數的“A”版本 在內部,每個字符串都被視為字節,沒有進行任何轉換。 這就是FileWrite有效寫入 ANSI 字符串的原因。

Unicode NSIS 安裝程序調用WideCharToMultiByte(CP_ACP, ...)在調用FileWrite之前轉換 Unicode 字符串。

對於 ASCII 而不是其他字符,它應該被認為是安全和可移植的。 另一台機器可能配置了不同的默認代碼頁,即使在同一台機器上,也並非所有 Unicode 字符都可以正確轉換。 唯一的例外是 Windows 10/11 配置為使用 UTF-8 作為默認值,或者如果您在清單中選擇加入

如果您正在安裝的應用程序也啟用了 Unicode,那么您應該使用FileWriteUTF16LE

也可以編寫Unicode.ini文件:

FileOpen $0 $INSTDIR\cfg.ini a
FileWriteUTF16LE /BOM $0 "" ; Make sure it has a BOM
FileClose $0
WriteIniStr $INSTDIR\cfg.ini Paths App $InstDir

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM