在Delphi下,AnsiString 和 WideString 的存储与管理各有不同,这里提供互相转换的函数一对。
/// Wide String -> Ansi String
function WideStringToAnsiString(const strWide: WideString; CodePage: Word): AnsiString;
var
Len: integer;
begin
Result := '';
if strWide = '' then Exit;
Len := WideCharToMultiByte(CodePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@strWide[1], -1, nil, 0, nil, nil);
SetLength(Result, Len - 1);
if Len > 1 then
WideCharToMultiByte(CodePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@strWide[1], -1, @Result[1], Len - 1, nil, nil);
end;
/// Ansi String -> Wide String
function AnsiStringToWideString(const strAnsi: AnsiString; CodePage: Word): WideString;
var
Len: integer;
begin
Result := '';
if strAnsi = '' then Exit;
Len := MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@strAnsi[1]), -1, nil, 0);
SetLength(Result, Len - 1);
if Len > 1 then
MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@strAnsi[1]), -1, PWideChar(@Result[1]), Len - 1);
end;
调用时需要传入 CodePage 参数,如果是简体中文环境,则 CodePage = 936(可以使用API函数GetACP获取系统默认CodePage)
Delphi实现AnsiString与WideString的转换函数
最新推荐文章于 2021-02-23 10:00:31 发布