0

Unicode バージョンの NSIS を使用してインストーラーを作成しています。ANSI ファイルと Unicode ファイルの両方に行を追加します。ファイルに行を書き込む前に、ファイルが ANSI エンコードか Unicode かを知る必要があるため、 FileWrite とFileWriteUTF16LE のどちらを使用する必要があるかがわかります。

ファイルのエンコーディング タイプを調べるにはどうすればよいですか?

ファイルのエンコーディングを教えてくれるUnicode プラグインは、 NSIS Unicode では機能しません。関数unicode::UnicodeTypeは常に 6 を返します。

どんなアドバイスも非常に役に立ちます。

4

2 に答える 2

0

そのプラグインを引き続き使用する場合は、Unicodeとして自分で再コンパイルするか、CallAnsiPluginプラグインを試してください。

自分でチェックを実行することもできます。

!include LogicLib.nsh

!define ByHandleIsFileUTF16LE "'' ByHandleIsFileUTF16LE "
!macro _ByHandleIsFileUTF16LE a b t f
!insertmacro _LOGICLIB_TEMP
FileReadByte ${b} $_LOGICLIB_TEMP
IntCmpU $_LOGICLIB_TEMP 0xFF "" `${f}`
FileReadByte ${b} $_LOGICLIB_TEMP
IntCmpU $_LOGICLIB_TEMP 0xFE `${t}` `${f}`
!macroend
!define IsFileUTF16LE "'' IsFileUTF16LE "
!macro _IsFileUTF16LE a b t f
!insertmacro _LOGICLIB_TEMP
Push $0
FileOpen $0 "${b}" r
!define _IsFileUTF16LE _IsFileUTF16LE${__LINE__}
!insertmacro _ByHandleIsFileUTF16LE '' $0 ${_IsFileUTF16LE}t ${_IsFileUTF16LE}f
${_IsFileUTF16LE}f:
    StrCpy $_LOGICLIB_TEMP ""
${_IsFileUTF16LE}t:
!undef _IsFileUTF16LE
FileClose $0
Pop $0
StrCmp "" $_LOGICLIB_TEMP `${f}` `${t}`
!macroend



section

!macro testutf16detection file
${If} ${IsFileUTF16LE} "${file}"
    DetailPrint "${file} is UTF16LE"
${Else}
    DetailPrint "${file} is NOT UTF16LE"
${EndIf}
!macroend

!insertmacro testutf16detection "$temp\test1.txt"
!insertmacro testutf16detection "$temp\test2.txt"

sectionend
于 2012-09-15T21:05:44.233 に答える