Во-первых, я бы избегал преобразования в и из строки; просто сравните sPassword[nCount]
с 127
напрямую; InstallScript хранит широкие символы (16-битные числа).
В качестве альтернативы вы можете попробовать WideCharToMultiByte с кодовой страницей US-ASCII (20127). Я не так силен с InstallScript и пишу без компилятора, поэтому вам, возможно, придется исправить одну или две ошибки, но вот грубая идея:
#define CP_US_ASCII 20127
extern prototype NUMBER Kernel32.WideCharToMultiByte(NUMBER, NUMBER, WSTRING, NUMBER, STRING, NUMBER, STRING, BYREF BOOL);
function BOOL IsSafeAscii(STRING szCheck)
STRING szOut;
BOOL bReplaced;
begin
WideCharToMultiBute(CP_US_ASCII, // only supports characters 0-127
WC_NO_BEST_FIT_CHARS, // or maybe 0; disallow turning accented to plain
szCheck, // test string
StrLength(szCheck), // length of test string
szOut, // return buffer
StrLength(szOut), // length of return buffer
"?", // replacement for unsupported characters
bReplaced); // whether replacement was used
return !bReplaced;
end;