首先,我会避免与字符串之间的转换;直接比较即可sPassword[nCount]
;127
InstallScript 存储宽字符(16 位数字)。
作为替代方法,您可以尝试使用 US-ASCII代码页(20127)调用WideCharToMultiByte 。我对 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;