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

时间:2018-09-24 16:29:49

标签: 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

但显示后,我在消息框中看到以下文本:

enter image description here

inetc插件和源页面: 问题是什么? 为什么从inetc插件读取后看到破碎的波斯文字? 当我使用代码时

Unicode true

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

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

1 个答案:

答案 0 :(得分:0)

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 $0
${If} $0 == "OK"
    FileOpen $1 "$PluginsDir\test.txt" r
    FileReadUTF16LE $1 $2
    FileClose $1
    MessageBox mb_ok $2
${EndIf}

我为您上载了INetC的新版本,但对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。