冥界3大法王 发表于 2023-8-7 21:40

Delphi PAChar的如何转成UTF-8的?

有如下定义:   

PLUGIN_NAME: PAChar = 'MoreTool';
需要转成UTF-8才能加到QT的菜单中,中文不乱码啊。{:301_974:}

lihongzhang 发表于 2023-8-7 22:52

其实可以调用一个外部的转换程序来解决

lihongzhang 发表于 2023-8-7 22:53

本帖最后由 lihongzhang 于 2023-8-7 22:55 编辑

只不过转换程序要和你的软件一起打包

freecat 发表于 2023-8-8 01:15

    var PLUGIN_NAME: PAnsiChar := 'MoreTool';
    var u : UTF8String := PLUGIN_NAME;
这样不行?

冥界3大法王 发表于 2023-8-8 04:53

freecat 发表于 2023-8-8 01:15
var PLUGIN_NAME: PAnsiChar := 'MoreTool';
    var u : UTF8String := PLUGIN_NAME;
这样不行?

明测试,睡觉中,梦游出菜看下。

冥界3大法王 发表于 2023-8-8 08:07

freecat 发表于 2023-8-8 01:15
var PLUGIN_NAME: PAnsiChar := 'MoreTool';
    var u : UTF8String := PLUGIN_NAME;
这样不行?

@freecat报错啊,老兄。

塞北的雪 发表于 2023-8-8 09:44

本帖最后由 塞北的雪 于 2023-8-8 09:46 编辑

ChatGPT:

在Delphi中,PAChar类型是一个指向字符数组的指针,通常用来表示以null结尾的字符串。要将PAChar类型的字符串转换为UTF-8编码格式,可以使用Delphi中的字符串转换函数和编码库。以下是一种示例方法:

引入编码库:
usesSystem.SysUtils, System.IOUtils, System.Classes, System.Encoding;
声明一个函数来将PAChar转换为UTF-8字符串:
function ConvertPCharToUTF8(p: PAnsiChar): UTF8String;
var
str: AnsiString;
begin
// 将PAnsiChar类型的字符串转换为AnsiString类型的字符串
str := p;

// 将AnsiString类型的字符串转换为UTF8String类型的字符串
Result := TEncoding.UTF8.GetString(TEncoding.Default.GetBytes(str));
end;

使用该函数将PAChar类型的字符串转换为UTF-8字符串:
var
p: PAnsiChar;
utf8Str: UTF8String;
begin
p := '你好'; // 假设p指向PAChar类型的字符串,这里是一个简单的例子

utf8Str := ConvertPCharToUTF8(p);

// 输出转换后的UTF-8字符串
ShowMessage(utf8Str);
end;

在以上示例中,ConvertPCharToUTF8函数首先将PAnsiChar类型的字符串转换为AnsiString类型的字符串,然后使用TEncoding.Default.GetBytes将AnsiString类型的字符串转换为字节数组,接着使用TEncoding.UTF8.GetString将字节数组转换为UTF8String类型的字符串。

请注意,该示例假设原始字符串已经是ANSI编码的。如果原始字符串是Unicode编码(如UTF-16),则需要使用相关的功能来进行适当的转换。

冥界3大法王 发表于 2023-8-8 11:31

塞北的雪 发表于 2023-8-8 09:44
ChatGPT:

在Delphi中,PAChar类型是一个指向字符数组的指针,通常用来表示以null结尾的字符串。要将PACh ...

报错,机器人先生。{:301_971:}

塞北的雪 发表于 2023-8-8 19:34

啥错误啊?贴出来,我去骂AI

freecat 发表于 2023-8-9 00:51

你那句const注了呀。。。。
const
马上就var?
页: [1]
查看完整版本: Delphi PAChar的如何转成UTF-8的?