2013-10-02 60 views
0

我有一個MS Doc文件,我已經將它從Blob轉換爲Base64編碼的字符串。它包含一個字符串爲:<z></z>找不到base64編碼sting

而且我base64編碼字符串這樣:<z></z>

但是,當我從BLOB數據轉換,然後上面的字符串搜索它,我無法找到它!

你可以指導我什麼,我做錯了:使用Base64編碼

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); 

回答

2

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>的位模式 - 聽起來不像是很有趣對我來說:-(

+0

嗨謝謝,爲洞察力..但我怎麼能得到blob的for循環,因爲Apex銷售隊伍中沒有字節數據類型! – user614946