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

在Lazarus中如何将指定编码转换为№字符(支持变量处理)

在Lazarus中处理多字节UTF-8字符的变量转换

1. 变量方式生成'№'字符的正确方法

已知'№'的UTF-8编码对应三个字节:0xE2、0x84、0x96,要通过变量生成该字符,不要用chr()拼接(会破坏UTF-8编码结构),直接将字节数组转换为UTF-8字符串即可:

方法一:使用SetString函数

var
  Bytes: array[0..2] of Byte = ($E2, $84, $96);
  S: string;
begin
  SetString(S, PChar(@Bytes[0]), Length(Bytes));
  Edit3.Caption := S;
end;

方法二:直接强制转换字节数组(FPC 3.0+适用)

FPC默认string为UTF-8编码,可直接将字节数组转换为字符串:

var
  Bytes: array[0..2] of Byte = ($E2, $84, $96);
begin
  Edit3.Caption := string(PChar(@Bytes[0]));
end;

2. 为什么chr(r1)+chr(r2)+chr(r3)会出现乱码

chr()函数默认返回单字节Ansi字符,拼接后得到的是Ansi字符串,而非UTF-8编码串。UTF-8的多字节编码是一个整体单元,拆分单个字节用chr()拼接,会被系统当成独立的Ansi字符解析,自然出现意外符号。

双字节字符(如'Р')能正常显示只是巧合:若系统默认Ansi编码恰好与该字符的UTF-8双字节编码兼容,才会显示正确,但这是不可靠的非跨平台做法。

通用处理原则

  • 始终将多字节序列作为整体转换为UTF-8字符串,不要拆分单个字节用chr()拼接
  • Lazarus/FPC中默认string为UTF-8编码,转换后的字符串可直接赋值给控件Caption属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:32:13