调试一下LowerCase就知道了。 function LowerCase(const S: string): string; var Ch: Char; L: Integer; Source, Dest: PChar; begin L := Length(S); SetLength(Result, L); Source := Pointer(S); Dest := Pointer(Result); while L <> 0 do begin Ch := Source^; if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32); Dest^ := Ch; Inc(Source); Inc(Dest); Dec(L); end; end;ShowMessage('圐圙'[4]); 第4个字符是G,调用LowerCase转换后变成g,所以第2个汉字“圙”就变成了“坓”。解决办法就是2楼所说的,用WideLowerCase和WideUpperCase替换LowerCase和UpperCase。
WideUpperCase 处理unicode
function LowerCase(const S: string): string;
var
Ch: Char;
L: Integer;
Source, Dest: PChar;
begin
L := Length(S);
SetLength(Result, L);
Source := Pointer(S);
Dest := Pointer(Result);
while L <> 0 do
begin
Ch := Source^;
if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
Dest^ := Ch;
Inc(Source);
Inc(Dest);
Dec(L);
end;
end;ShowMessage('圐圙'[4]);
第4个字符是G,调用LowerCase转换后变成g,所以第2个汉字“圙”就变成了“坓”。解决办法就是2楼所说的,用WideLowerCase和WideUpperCase替换LowerCase和UpperCase。