You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi中将4字节UTF-8字符串转换为Unicode表情符号?

关于Delphi 10.3 UTF-8字节转可显示Emoji的解决方法

疑问解答

你当前拿到的字符串不是合法的Unicode字符串:本质是Web服务返回的UTF-8字节序列被错误地按单字节编码(如ANSI/ASCII)直接映射为了Delphi的宽字符,每个UTF-8字节被单独转换成了一个Unicode字符,所以显示为乱码。

转换操作步骤

  • 第一步:将错误编码得到的乱码字符串还原为原始UTF-8字节数组
var
  Utf8Bytes: TBytes;
  RawStr: string; // 你从Web服务拿到的乱码字符串
  i: Integer;
begin
  RawStr := '你从Web接口获取的原始乱码字符串';
  SetLength(Utf8Bytes, Length(RawStr));
  for i := 0 to Length(RawStr) - 1 do
    Utf8Bytes[i] := Byte(RawStr[i+1]); // Delphi字符串默认采用1基索引
  • 第二步:将UTF-8字节数组转换为合法Unicode字符串
var DecodedStr := TEncoding.UTF8.GetString(Utf8Bytes);
  • 第三步:直接赋值给TMemo控件即可显示
Memo1.Text := DecodedStr;
end;

简化写法

如果确认返回的所有内容都是UTF-8编码的字节映射结果,可以直接用类型转换实现一步转码:

var DecodedStr := string(UTF8String(RawStr));

注意:以上写法适配Delphi 2009及以后所有版本(包含10.3),如果转换后仍然显示方块占位符,请确认TMemo使用的字体支持Emoji渲染,推荐使用Segoe UI Emoji字体。

内容的提问来源于stack exchange,提问作者JP_dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:45:03