我有一个MS Doc文件,我已将它从Blob转换为Base64编码的字符串。它包含一个字符串:<z></z>
我有base64编码的字符串:<z></z>
但是当我在从blob数据转换的上面的字符串中搜索它时,我无法找到它!
你能指导我做错了吗?
Blob beforeblob1 = Blob.valueOf(vDovMerge.Merge_Text__c);
String vDovMergeBlob = EncodingUtil.base64Encode(beforeblob1 );
String v = EncodingUtil.base64Encode(vDoc.Body);
system.debug('****v****'+v);
Blob beforeblob = Blob.valueOf('<z></z>');
String rep = EncodingUtil.base64Encode(beforeblob );
system.debug('****rep****'+rep );
v = v.replace(rep ,vDovMergeBlob );
system.debug('****v****'+v);
答案 0 :(得分:2)
Base64编码将3个字节的输入转换为4个字节的输出。所以当编码<z></z>
时,它肯定会作为要编码的块的第一个字节开始。当将其编码为较大数据块的一部分时,它可能最终作为要编码的第二个或第三个字节开始,从而产生完全不同的输出 - 甚至取决于块周围的数据。
实施例:
假设ASCII编码
编码<z></z>
会产生PHo+PC96Pg==
编码a<z></z>
会产生YTx6Pjwvej4=
编码aa<z></z>
会产生YWE8ej48L3o+
编码aaa<z></z>
会导致YWFhPHo+PC96Pg==
再次包含原始编码,因为它从3字节边界开始。
因此,搜索base64编码数据的唯一方法是将其视为比特流,并在不考虑字节边界的情况下搜索<z></z>
的比特模式 - 听起来不像对我很有趣: - (