我試圖從服務器讀取使用套接字的響應,並且信息是UTF-8編碼的。我將InputStream從InputStreamReader中的套接字中編碼設置爲「UTF-8」。BlackBerry Socket UTF-8 InputStreamReader問題
出於某種原因,似乎只有部分響應被讀取,然後讀數只會持續一兩分鐘,然後結束。如果我將InputStreamReader上的編碼設置爲「ISO-8859-1」,那麼我可以立即讀取所有數據,但顯然不是所有字符都能正確顯示。
代碼看起來像下面
socketConn = (SocketConnection)Connector.open(url);
InputStreamReader is = new InputStreamReader(socketConn.openInputStream(), "UTF-8");
然後我在標題和內容閱讀。內容被分塊,我讀取每個塊的大小(從十六進制轉換爲十進制)的行,知道要讀多少。
我不理解兩種編碼在閱讀上的差異及其可能產生的效果,因爲它在ISO-8859-1沒有問題的情況下工作,並且它最終以UTF-8工作,只有很長的延遲。
一般來說,像這樣解碼部分UTF-8流可能會導致錯誤。由於每個UTF-8字符可能由多個字節組成,因此在對其任意大小的塊進行解碼時,最終可能會在一個塊的末尾出現一個角色的第一部分,而在下一個塊的開始處則會出現該角色的其餘部分,在兩個組塊上給出錯誤的解碼結果。在你的具體情況下,你知道每個塊的大小,他們保證正確解碼,所以這應該工作得很好。嗯,是的...我希望這是有道理:) – Martin
這是有道理的!謝謝,這是我可能需要注意的一個角落案例。 – mparizeau