在 nsis 中使用 inetc 插件读取波斯语文本文件

read persian text file with using inetc plugin in nsis

我有很多带有波斯语文本的文本文件:“سلام” 现在我想读取文本文件并直接写入变量

我使用 inetc 插件示例:

Unicode true

Section

;test_Unicode_BE_BOM.txt:
inetc::get /NOCANCEL /TOSTACK /SILENT "http://update.nodmarket.com/Persian_Text_Files/test_Unicode_BE_BOM.txt" /END
Pop $R0
Pop $R1
MessageBox MB_OK "$R1"


;test_Utf8_BOM.txt
inetc::get /NOCANCEL /TOSTACK /SILENT "http://update.nodmarket.com/Persian_Text_Files/test_Utf8_BOM.txt" /END
Pop $R0
Pop $R1
MessageBox MB_OK "$R1"


;test_Unicode_LE_BOM.txt
inetc::get /NOCANCEL /TOSTACK /SILENT "http://update.nodmarket.com/Persian_Text_Files/test_Unicode_LE_BOM.txt" /END
Pop $R0
Pop $R1
MessageBox MB_OK "$R1"

SectionEnd

但演出结束后我在消息框中看到了这段文字:

inetc 插件和源码页面: 问题是什么? 为什么我在从 inetc 插件读取后看到损坏的波斯文本? 当我使用代码

Unicode true

Section
MessageBox MB_OK|MB_RIGHT|MB_RTLREADING "سلام"
SectionEnd

我在消息框中看到了“سلام”,成功了 但我认为 inetc 插件破坏了波斯语!

INetC 并不真正支持即时 Unicode 转换。

如果您需要完全控制,您必须将文件下载到一个临时目录,然后使用 NSIS 文件说明读取它。

InitPluginsDir
inetc::get /NOCANCEL /SILENT "http://update.nodmarket.com/Persian_Text_Files/test_Unicode_LE_BOM.txt" "$PluginsDir\test.txt" /END
Pop [=10=]
${If} [=10=] == "OK"
    FileOpen  "$PluginsDir\test.txt" r
    FileReadUTF16LE  
    FileClose 
    MessageBox mb_ok 
${EndIf}

我为您上传了一个新版本的 INetC 到 wiki,支持有限的 UTF-8 和 UTF-16LE(需要 BOM)。

inetc::get /NOCANCEL /TOSTACKCONV /SILENT "http://update.nodmarket.com/Persian_Text_Files/test_Utf8_BOM.txt" /END ; v1.0.5.3+ required for /TOSTACKCONV to support BOM detection.
Pop $R0
Pop $R1
MessageBox MB_OK "$R0:$R1"

将 Unicode 文本放入 .nsi 文件是可行的,因为 NSIS 编译器支持 Unicode,但插件返回的文本在插件内部进行文本处理,它可能不支持 Unicode。