我使用以下代碼以UTF-8格式將字符串寫入流。我在我的字符串的字節前加上一個有符號的短,然後我寫出來。有一個例外:我不能以0x0010作爲前綴,因爲它是最終格式的關鍵字。但是我必須確保讀者最終得到與我的str
參數完全相同的字符串,即使它的長度是0x0010。是否有任何UTF-8無法識別的字節?
public static void writeString(DataOutputStream out,String str) throws IOException{
byte[] bytes = str.getBytes(CHARSET_UTF_8);
if(bytes.length > Short.MAX_VALUE){
throw new IOException();
}
short len = (short)bytes.length;
if(bytes.length == 0x0010){
len++;
}
out.writeShort(len);
out.write(bytes);
if(bytes.length == 0x0010){
out.write(DEAD_BYTE);
}
}
public static final Charset CHARSET_UTF_8 = Charset.forName("UTF-8");
UTF-8在字符串末尾無法識別的字節是否存在(256)?
另外,以下問題沒有幫助我。最後我以?
的角色結束了。 30025693
是的,0xFF是UTF-8中不能在任何地方的字節之一。而任何≥0xC0的數據都不能成爲最後一個。 – user2233709
'0xff'給出'?'它不起作用。 – Gergely
不知道你的意思。你的問題是你應該爲DEAD_BYTE使用什麼值? (我不知道java,不知道這是一個語言定義的值還是你自己定義的東西。)如果是這樣,我認爲你會好的0x00。無論如何,你處理特殊值0x10的方式對我來說看起來很錯... – user2233709