如果您使用的是最新的稳定版本 2.46,NSIS 不支持 unicode,您必须自己构建 .ini 文件FileOpen
/ FileWrite
/FileClose
并通过系统插件转换文本。
自 2009 年以来一直在酝酿一个期待已久的 unicode 分支,我没有注意到刚刚发布的v 3.0a0可以在下载站点上找到。(直到您需要检查代码并自己构建二进制文件)。
你应该试一试。
编辑:我制作了一个小脚本来演示如何使用 NSIS 2.46“手动”编写 UTF-16le 文本文件,您可以尝试是否将文本框中带有“异国情调”字符的字符串正确写入测试文件
!include LogicLib.nsh
Name "unicode246"
OutFile unicode246.exe
ShowInstDetails show
Section
StrCpy $1 "héhé © reçu" ;some "exotic" french chars
StrLen $2 $1
System::Call "*(&w${NSIS_MAX_STRLEN} r1)i.s" ;allocate a buffer and write in wide char
Pop $0 ;get the buffer address
FileOpen $9 $EXEDIR\test.txt w ;Opens a file for writing
;write UTF-16LE BOM
FileWriteByte $9 "255"
FileWriteByte $9 "254"
;compute the buffer byte size
IntOp $2 $2 * 2
IntOp $2 $2 - 1
;loop on the bytes
${forEach} $1 0 $2 + 1
IntOp $3 $0 + $1 ;compute the address of the nth byte
System::Call "*$3(&i1 .r4)" ;read the byte in $4
DetailPrint "address $0 + $1 = $3 = $4"
FileWriteByte $9 $4
${next}
FileClose $9
System::Free $0 ;free buffer
SectionEnd