如何在Delphi中获取字符ó的UTF-8编码Base64结果w7M=?
在Delphi中获取UTF-8字符集的Base64编码结果(w7M=)
你提到的TIdEncoderMIME.EncodeString和EncdDecd.EncodeString默认采用非UTF-8字符集(如ISO-8859-1)编码,因此要得到目标结果,核心思路是先将字符串转换为UTF-8字节数组,再对字节数组执行Base64编码。以下是几种可行方案:
方案1:基于Indy库的实现
利用TIdEncoderMIME的EncodeBytes方法直接处理UTF-8字节数组:
uses IdEncoderMIME, SysUtils; function GetUTF8Base64(const AStr: string): string; var UTF8Bytes: TBytes; begin UTF8Bytes := TEncoding.UTF8.GetBytes(AStr); Result := TIdEncoderMIME.EncodeBytes(UTF8Bytes); end; // 调用示例: // ShowMessage(GetUTF8Base64('ó')); // 输出w7M=
方案2:基于EncdDecd库的实现
先转UTF-8字节数组,再用EncodeBase64处理:
uses EncdDecd, SysUtils; function GetUTF8Base64(const AStr: string): string; var UTF8Bytes: TBytes; Base64Buffer: string; begin UTF8Bytes := TEncoding.UTF8.GetBytes(AStr); SetLength(Base64Buffer, EncodeBase64(UTF8Bytes[0], Length(UTF8Bytes), False)); EncodeBase64(UTF8Bytes[0], Length(UTF8Bytes), Base64Buffer); Result := Base64Buffer; end; // 调用示例: // ShowMessage(GetUTF8Base64('ó')); // 输出w7M=
方案3:直接转换UTF-8字符串编码
借助Delphi的UTF8String类型直接转换后编码:
uses SysUtils, EncdDecd; function GetUTF8Base64(const AStr: string): string; var UTF8Str: UTF8String; begin UTF8Str := UTF8String(AStr); Result := EncodeString(PAnsiChar(UTF8Str), Length(UTF8Str)); end;
以上方案的核心都是先将目标字符串转为UTF-8编码的字节序列,再对序列做Base64编码,最终即可得到w7M=的结果。
内容的提问来源于stack exchange,提问作者plionut
相关产品推荐
相关产品推荐

