procedure TForm1.Button1Click(Sender: TObject);
var ad:widechar; s:LPCSTR; s2:string;
begin
s2:='s多少付' ;
// s:= pchar(CP936ToUTF8(s2));
s:=pchar( UTF8ToCP936(s2));
showmessage(s);
MessageBox(0,PChar(UTF8ToAnsi('正常显示中文')),'1',MB_OK or MB_ICONEXCLAMATION);
MessageBox(0,s,'1',0);markdown
end; ide
因为Lazarus基于UTF-8,所以当读写Windows创建的纯文本文件的时候,因为其中的中文使用GBK(CP936)编码,可能会出现错误。此时可以使用Lazarus自带的代码页转换单元LConvEncoding对编码进行转换。编码
如UTF8和GBK互转spa
function CP936ToUTF8(const s: string): string; // Chinese function UTF8ToCP936(const s: string; SetTargetCodePage: boolean = false): RawByteString; // Chinese, essentially the same as GB 2312 and a predecessor to GB 18030
如指定代码页之间互转.net
function ConvertEncoding(const s, FromEncoding, ToEncoding: string {$ifdef FPC_HAS_CPSTRING}; SetTargetCodePage: boolean = false{$endif}): string;
注:GB18030因为包含部分四字节字符,实际其代码页CP54936是不能使用的,可是因为GB18030向下兼容目前中文Windows系统使用的GBK,而GBK又向下兼容GB2312(CP20936),因此实际操做中按CP936处理便可。code