2016-08-01 47 views
0

我將文本轉換爲Base64 byteArray沒有任何問題。不幸的是,轉換後的字符串需要以「PD」開頭。這意味着我應該將其編碼爲UTF-8,而不使用BOM而不使用BOM。我在網上開始了幾個代碼和一切。但是,我無法成功。任何幫助表示讚賞。如何將字符串轉換爲UTF-8中的byteArray無Bom

非常感謝。

問候 阿爾珀

public static byte[] convertToByteArray(String strToBeConverted) { 
    return strToBeConverted.getBytes(StandardCharsets.UTF_8); 
} 
+0

http://stackoverflow.com/questions/1835430/byte-order-mark-screws-up-file-reading-in-java也許 – 2016-08-01 11:02:17

+0

UTF-8 BOM總是有兩個字節,在數據。所以當你使用轉換後的數據時,你可以將它們剔除/跳過它們。 –

回答

1
return strToBeConverted.replaceFirst("^\uFEFF", "").getBytes(StandardCharsets.UTF_8); 

的BOM是Unicode代碼點U + FEFF。

刪除它意味着首先檢查它是否確實存在。 String.replaceFirst是昂貴的,因爲它使用正則表達式匹配,但在這裏很好。

+0

我修好了......謝謝喬普。原始文件是錯誤的。我修復了它並運行你的代碼,現在我有一個沒有bom文件的UTF8。歡呼聲 – user2307786

+1

像你說的那樣,'replaceFirst()'代價昂貴,而且沒有必要。檢查字符串中的第一個代碼點是否是BOM,如果是,則跳過它,例如:if((strToBeConverted.length()> 0)&&(strToBeConverted.codePointAt(0)== 0xFEFF) )strToBeConverted = strToBeConverted()。substring(1);返回strToBeConverted.getBytes(StandardCharsets.UTF_8);' –

+0

@RemyLebeau感謝您的代碼; 'charAt'也是可能的,但現在代碼點是更合理的選擇。注意(對於讀者):substring不會複製char數組的內容,所以速度快而且不昂貴。 –

相關問題