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

如何在Business Central AL中获取文本字节?求C#对应方法替代方案

在Business Central AL中实现类似C# Encoding.UTF8.GetBytes()的功能

你之前尝试的Base64Convert.ToBase64()是将字节数组编码为Base64字符串,和Encoding.UTF8.GetBytes()的作用(将UTF-8字符串转为字节数组)完全不同,所以没达到预期效果。以下是纯AL语言的实现方案,无需依赖外部DLL,适用于沙盒环境:

实现思路

UTF-8编码规则:

  • 单字节字符(ASCII,U+0000至U+007F):字节最高位为0,直接对应字符的ASCII值
  • 双字节字符(U+0080至U+07FF):第一个字节以110开头,第二个字节以10开头
  • 三字节字符(U+0800至U+FFFF):第一个字节以1110开头,后续两个字节以10开头
  • 四字节字符(U+10000至U+10FFFF):第一个字节以11110开头,后续三个字节以10开头

AL代码实现

创建一个Codeunit,添加如下函数:

codeunit 50100 "UTF8 Converter"
{
    procedure StringToUTF8Bytes(InputText: Text): Byte[]
    var
        Bytes: Byte[];
        CharCode: Integer;
        I: Integer;
    begin
        if InputText = '' then
            exit(Bytes);

        for I := 1 to StrLen(InputText) do begin
            CharCode := Asc(InputText[I]);
            case true of
                // 单字节字符
                CharCode <= 127:
                    Bytes.Add(CharCode);
                // 双字节字符
                CharCode <= 2047:
                    begin
                        Bytes.Add(192 + (CharCode div 64));
                        Bytes.Add(128 + (CharCode mod 64));
                    end;
                // 三字节字符
                CharCode <= 65535:
                    begin
                        Bytes.Add(224 + (CharCode div 4096));
                        Bytes.Add(128 + ((CharCode div 64) mod 64));
                        Bytes.Add(128 + (CharCode mod 64));
                    end;
                // 四字节字符(Business Central中Text类型支持的Unicode范围)
                else
                    begin
                        Bytes.Add(240 + (CharCode div 262144));
                        Bytes.Add(128 + ((CharCode div 4096) mod 64));
                        Bytes.Add(128 + ((CharCode div 64) mod 64));
                        Bytes.Add(128 + (CharCode mod 64));
                    end;
            end;
        end;
        exit(Bytes);
    end;
}

使用示例

在需要转换的地方调用该函数:

var
    UTF8Converter: Codeunit "UTF8 Converter";
    InputStr: Text;
    ResultBytes: Byte[];
begin
    InputStr := 'Hello 世界 🌍';
    ResultBytes := UTF8Converter.StringToUTF8Bytes(InputStr);
    // 可以进一步处理字节数组,比如转Base64或者其他操作
end;

验证说明

该函数会将输入的UTF-8字符串按照标准UTF-8编码规则转换为字节数组,和C#的Encoding.UTF8.GetBytes()输出结果一致。你可以通过将字节数组转回字符串或者对比Base64编码结果来验证正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:20:06