로그하려는 파일이 Windows 유니 코드 (UTF-16LE) 인코딩 된 텍스트 파일 인 것 같습니다.
iConv 명령 줄을 사용하여 파일을 Windows UTF-8 인코딩 파일로 변환 할 수 있습니다.
LoadStringFromFile
Support Function은 유니 코드 문자열을 제대로로드하지 않으며 ANSI 및 UTF-8 인코딩 된 텍스트 파일로드 만 지원합니다.
Inno Setup 컴파일러 디버그 출력은로드 할 수없는 문자 (NULL)를 찾기 때문에 텍스트 파일 로깅을 중지하므로 컴파일러 디버그 출력에서 "E"만 가져 오는 이유는 LoadStringFromFile
도 텍스트 파일을 완전히로드하기 때문입니다. 의 iconv 실행 파일을 얻기 위해 다음과 같이 몇 가지 DLL을 문자 인코딩 사이의 변환에 사용 된
당신은의 iconv의 설치 프로그램을 다운로드해야합니다.
다운로드 후
![enter image description here](https://i.stack.imgur.com/Qeciu.jpg)
, GnuWin32 (Windows 용 LibIconv)를 설치하고 설치 폴더로 이동합니다.
"bin"이라는 설치 폴더의 하위 디렉토리에있는 다음 네 개의 파일을 복사하십시오.
그들은 다음과 같습니다
libcharset1.dll
libiconv2.당신이 당신의 이노 설치 프로젝트의 파일을 저장할 디렉토리에이 파일을 복사
iconv.exe
libintl3.dll dll을.
그런 다음 변환을 수행하려면 다음 코드를 사용하십시오.
[Files]
Source: "libcharset1.dll"; Flags: dontcopy
Source: "iconv.exe"; Flags: dontcopy
Source: "libiconv2.dll"; Flags: dontcopy
Source: "libintl3.dll"; Flags: dontcopy
[Code]
function InitializeSetup(): Boolean
var
ErrorCode: Integer;
begin
ExtractTemporaryFile('iconv.exe');
ExtractTemporaryFile('libcharset1.dll');
ExtractTemporaryFile('libintl3.dll');
ExtractTemporaryFile('libiconv2.dll');
ShellExec('Open', ExpandConstant('CMD.exe'), ExpandConstant('/C iConv -f UTF-16LE -t UTF-8 < SKINRESOURCE-INFO.inf > SKINRESOURCE-INFO-ANSI.inf'), ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode);
DeleteFile(ExpandConstant('{tmp}\SKINRESOURCE-INFO.inf'));
지금
LoadStringFromFile
는 윈도우 UTF-8 인코딩이 제대로 지금처럼 텍스트 파일을로드해야합니다.
유니 코드 Inno Setup을 사용하는 경우 Log(String(RESOURCE_INFO))
과 같은 유니 코드 문자열로 변환 한 후 로그 할 수도 있습니다.
감사합니다! 매력처럼 작동합니다! – Blueeyes789
1) 왜 ANSI인가? 이런 식으로 유니 코드 문자를 잃게됩니다. UTF-8을 사용하십시오! 2) ANSI는 Windows-1252와 같지 않습니다. ANSI 인코딩은 Windows 구성에 따라 다릅니다. 따라서 명시 적으로 Windows-1252로 변환했지만 구성된 ANSI 인코딩을 사용하여 파일을로드하면 파일에서 ASCII 문자 만 사용하지 않는 한 엉망이됩니다. 3) [PowerShell을 사용하여 인코딩 변환] (http://stackoverflow.com/a/4817683/850848), 타사 도구가 필요하지 않습니다. 그러나 어쨌든 외부 도구가 필요하지 않습니다. 이것을 파스칼 스크립트로 변환 할 수 있습니다. –
@MartinPrikryl이 UTF-8로 수정되었습니다. PowerShell을 잊어 버렸습니다. :-( – GTAVLover