在 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。
我有很多带有波斯语文本的文本文件:“سلام” 现在我想读取文本文件并直接写入变量
我使用 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。