使用Lazarus不得不面对编码问题,尤其中文。Lazarus使用的是UTF8编码,而很多windows程序使用的是ANSI编码,编码问题在此不多说大家可以google去。
ANSI数据库与Lazarus编程的解决方法:
1.全局设置一个isNeedANSI变量;
2.从数据库读取时:
function Tdmd.FromDBStr(str:string):string;
begin
end;
3.向数据库写入数据时:
function Tdmd.ToDBStr(dbstr:string):string;
begin
end;
4.TDBGrid的修改:
修改如下过程:
procedure TCustomGrid.DrawCellText(aCol, aRow: Integer; aRect:TRect;
begin
end;
附注:
function UnicodeToUtf8(Dest: PChar; Source:PWideChar; MaxBytes: SizeInt): SizeInt;{$ifdefSYSTEMINLINE}inline;{$endif}
function UnicodeToUtf8(Dest: PChar; MaxDestBytes: SizeUInt; Source:PWideChar; SourceChars: SizeUInt):SizeUInt;
function Utf8ToUnicode(Dest: PWideChar; Source: PChar; MaxChars:SizeInt): SizeInt;{$ifdefSYSTEMINLINE}inline;{$endif}
function Utf8ToUnicode(Dest: PWideChar; MaxDestChars: SizeUInt;Source: PChar; SourceBytes: SizeUInt):SizeUInt;
function UTF8Encode(const s : WideString) :UTF8String;
function UTF8Decode(const s : UTF8String):WideString;
function AnsiToUtf8(const s : ansistring): UTF8String;{$ifdefSYSTEMINLINE}inline;{$endif}
function Utf8ToAnsi(const s : UTF8String) : ansistring;{$ifdefSYSTEMINLINE}inline;{$endif}
function WideStringToUCS4String(const s : WideString) :UCS4String;
function UCS4StringToWideString(const s : UCS4String) :WideString;
联系客服