天天看点

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处理即可。