天天看點

MessageBox中文亂碼解決方法 https://blog.csdn.net/poolord/article/details/77488704在Lazarus中對字元串進行代碼頁轉換

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);

end;

https://blog.csdn.net/poolord/article/details/77488704

在Lazarus中對字元串進行代碼頁轉換

2017年08月22日 22:29:26 池龍 閱讀數 885更多 分類專欄: Delphi / Lazarus   版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結和本聲明。 本文連結: https://blog.csdn.net/poolord/article/details/77488704

由于Lazarus基于UTF-8,是以當讀寫Windows建立的純文字檔案的時候,由于其中的中文使用GBK(CP936)編碼,可能會出現錯誤。此時可使用Lazarus自帶的代碼頁轉換單元LConvEncoding對編碼進行轉換。

如UTF8和GBK互轉

  • 1
  • 2

如指定代碼頁之間互轉

function ConvertEncoding(const s, FromEncoding, ToEncoding: string
  {$ifdef FPC_HAS_CPSTRING}; SetTargetCodePage: boolean = false{$endif}): string; 
           
  • 1
  • 2
  • 3

注:GB18030由于包含部分四位元組字元,實際其代碼頁CP54936是不能使用的,但是由于GB18030向下相容目前中文Windows系統使用的GBK,而GBK又向下相容GB2312(CP20936),是以實際操作中按CP936處理即可。

轉載于:https://www.cnblogs.com/delphi-xe5/p/11556708.html

由于Lazarus基于UTF-8,是以當讀寫Windows建立的純文字檔案的時候,由于其中的中文使用GBK(CP936)編碼,可能會出現錯誤。此時可使用Lazarus自帶的代碼頁轉換單元LConvEncoding對編碼進行轉換。

如UTF8和GBK互轉

  • 1
  • 2

如指定代碼頁之間互轉

function ConvertEncoding(const s, FromEncoding, ToEncoding: string
  {$ifdef FPC_HAS_CPSTRING}; SetTargetCodePage: boolean = false{$endif}): string; 
           
  • 1
  • 2
  • 3

注:GB18030由于包含部分四位元組字元,實際其代碼頁CP54936是不能使用的,但是由于GB18030向下相容目前中文Windows系統使用的GBK,而GBK又向下相容GB2312(CP20936),是以實際操作中按CP936處理即可。