lazarus 下的 utf8 及其他字符串处理及 windows api 调用时中文乱码的处理 -- 专题
clq
浏览(567) -
2019-11-27 13:36:38 发表
编辑
关键字: lazarus
[2021-03-07 19:33:03 最后更新]
lazarus 下的 utf8 及其他字符串处理及 windows api 调用时中文乱码的处理 -- 专题 这是一个专题,更多的可以看下面的合集部分。 在使用 la 2.02 的时候,意外地发现调用的 windows api 得出的中文是乱码,我知道这是因为 la 用 utf8 而我调用的是 Ansi 版 api ,于是按 delphi7 的经验直接加了一个 UTF8ToAnsi 转换函数,不料结果和 utf8 没啥两样。吃惊之余研究了一下,原来 la 的 UTF8ToAnsi 是 freepascal 自带的函数,和 delphi7 中的不一样,要换用 UTF8ToWinCP 或者是 UnicodeToWinCP ... 示例代码如下 -------------------------------------------------------- unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,windows,LConvEncoding; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end; var Form1: TForm1; implementation uses LazUTF8, LazUnicode; {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin messagebox(0, 'aaa 中文', '', 0); messagebox(0, PAnsiChar( Utf8ToAnsi('aaa 中文')), '', 0); end; //https://www.cnblogs.com/delphi-xe5/p/11556708.html // procedure TForm1.Button2Click(Sender: TObject); var ad:widechar; s:LPCSTR; s2:string; as1:ansistring; begin s2:='s多少付' ; // s:= pchar(CP936ToUTF8(s2)); s:=pchar( UTF8ToCP936(s2)); //LConvEncoding showmessage(s); //这个可 delphi7 UTF8ToAnsi 是不同的,奇怪的是在 la 下居然转换出来的仍然是 utf8 //所说这个是 freepasscal 自带的,而其他的是 la 自己的 MessageBox(0,PChar(UTF8ToAnsi('正常显示中文')),'1',MB_OK or MB_ICONEXCLAMATION); //win10 下其实并不行 MessageBox(0,PAnsiChar(UTF8ToAnsi('正常显示中文1')),'1',MB_OK or MB_ICONEXCLAMATION); //win10 下其实并不行 MessageBox(0,s,'1',0); //win10 下可以 as1 := UTF8ToWinCP('正常显示中文2'); //UnicodeToWinCP //在 LazUTF8 中 MessageBox(0,PAnsiChar(as1),'1',0); //win10 下可以 as1 := UnicodeToWinCP('正常显示中文3'); //UTF8ToWinCP //在 LazUnicode MessageBox(0,PAnsiChar(as1),'1',0); //win10 下可以 //-------------------------------------------------------- //https://wiki.lazarus.freepascal.org/Unicode_Support_in_Lazarus 写明了调用 windows api 是要用 UTF8ToWinCP, WinCPToUTF8 而在旧版本中是 UTF8ToSys end; end.
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.