如何在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
相关产品推荐
相关产品推荐

