Base64 解码错误:目标多字节代码页中不存在 Unicode 字符的映射

问题描述 投票:0回答:1

我正在开发一个 Delphi 项目,我需要解码从 QR 码中提取的 Base64 字符串。 QR 码包含文本数据、日期和数值的组合。这是我正在使用的 Base64 字符串的示例:

AT9NVU5JUiBBQkRVTExBSCBBTE1VTklGIEZBQ1RPUlkgRk9SIFBMQVNUSUMgUElQRVMgJiBGSVRUSU5HUyBDTy4CDzMwMDUyODA3OTYwMDAwMwMTMjAyNC0xMC0xM1QwNDo0MDoyMwQINDM5NTIuNDEFBzU3MzIuOTIGLFdPMkt1TE9CS2tkMkdRSnU1ZTA3Zzd3RU5vVXFoVy92UFZVTzA5UkdWTzQ9B2BNRVFDSUVPYm95MjRmNExMYzRFeDlEdkpqbUxnYU5BWS9Ybmo2UGhlUWNxYVYwbUxBaUJjVDZlZ2VpKzBXMFhNbVc1bW9FOWh5QUFwdjJCRUtXS2t6dWJ5UENKSGdnPT0IWDBWMBAGByqGSM49AgEGBSuBBAAKA0IABKjKpalSynCgT1a7cnHqONrPEWyCpcqx2PLnhzmXsH1CtjSbfljxm5adWyeZ2ekTcynTBhMXAkmW85x+SGllB5w=

当我尝试在 Delphi 中使用 TNetEncoding.Base64.Decode 对其进行解码时,出现以下错误:

No mapping for the Unicode character exists in the target multi-byte code page.

我注意到,如果 QR 字符串比上面的示例短,则不会发生错误。 我也尝试了下一个,但仍然遇到相同的错误:

DecodedBytes := TNetEncoding.Base64.DecodeStringToBytes(QRstr);
DecodeString := TEncoding.UTF8.GetString(DecodedBytes);

任何建议或示例代码将不胜感激!

delphi base64 decode
1个回答
0
投票

您示例中的 QR 码编码数据包含无法转换为 Unicode 字符串的二进制信息。

您的代码在 Base64 解码上不会失败,但在以下行中将字节转换为字符串时会失败:

DecodeString := TEncoding.UTF8.GetString(DecodedBytes);

您必须使用

DecodedBytes
并根据其二进制格式规范对其进行解析。

© www.soinside.com 2019 - 2024. All rights reserved.