登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: lazarus 下的 utf8 及其他字符串处理及 windows api 调用时中文乱码的处理 -- 专题     [回主站]     [分站链接]
lazarus 下的 utf8 及其他字符串处理及 windows api 调用时中文乱码的处理 -- 专题
clq
浏览(290) - 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.









总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
lazarus的utf8专题 更多
lazarus 更多
lazarus不同于delphi的地方 更多
lazarus开发 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1