我正在尝试解码base64字符串
Sample:='MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECO9X2Lfq3EYMBBiX0/4McWT3y6hWMvOJvH5MwD22EOvPbLQ=';
Result:=DecodeString(Sample);
出现错误:“目标多字节代码页中不存在Unicode字符的映射”。 我在做什么错了?
答案 0 :(得分:3)
您的代码示例不完整,但是我只能假设DecodeString
是Soap.EncdDecd
中的函数。在这种假设下,对DecodeString
的调用确实会引发您所描述的异常。
该异常是由一个非常普遍的误解引起的,即二进制和文本数据是可互换的。当您致电DecodeString
时,实际上是在进行两项操作:
因为base64数据有效,所以第一个操作成功。第二个操作失败,因为二进制数据不是有效的UTF-8编码文本。
很可能是您犯了错误,尽管很常见,但是却想将二进制数据(字节数组)视为字符串。字符串和字节数组不是同一回事。
您拥有二进制数据,因此应将其视为这样:
uses
System.NetEncoding;
var
base64: string;
bytes: TBytes;
....
base64 := 'MEIEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECO9X2Lfq3EYMBBiX0/4McWT3y6hWMvOJvH5MwD22EOvPbLQ=';
bytes := TNetEncoding.Base64.DecodeStringToBytes(base64);