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