2012-05-16 8 views
0
05-16 14:29:16.935: W/System.err(20981): java.lang.NumberFormatException: 
    unable to parse '��������������������' as integer 

這是非常錯誤消息我的Android應用程序顯示了當它應該接受10字節長的字符串(顯示爲錯誤消息20個不同的字節。爲什麼我的繩子不能通過插座正確穿過?

BufferedReader in = new BufferedReader(
     new InputStreamReader(client.getInputStream(), "UTF-8")); 
BufferedWriter out = new BufferedWriter(
     new OutputStreamWriter(socket.getOutputStream(), "UTF-8")); 

^^我添加UTF-8。

String count = String.format("%10s", 
     (new Integer(result.length())).toString()).replace(" ", "0"); 

這是我如何獲得我送字符串,它的正常工作,因爲它正確地顯示了PC端的日誌。

但是,在Android方面,它沒有被正確接收。

BufferedReader in = new BufferedReader(
     new InputStreamReader(client.getInputStream(), "UTF-8")); 
CharBuffer buf = CharBuffer.allocate(1024*1024); 
in.read(buf); 
char[] buffer = new char[10]; 
buf.get(buffer, 0, 10); 
cont = Integer.parseInt(new String(buffer)); 

這就是我如何獲取字符串回來,它似乎並沒有正常工作。有更多經驗的人能幫助我理解爲什麼這不起作用?

+0

你是使用相同的字符集在兩邊編碼和解碼字符串嗎? – mcfinnigan

+0

難道是一些編碼問題? –

+0

我不確定,我沒有編輯任何與編碼相關的任何內容。 – Bogdacutu

回答

3

Java String的是Unicode,每個字符事務2個字節。這很好。

您應該告訴流如何對字符串進行編碼。 UTF-8是我的建議。

我建議你忘記數字解析位一段時間,只是看看你是否能理解來回發送的內容。不可讀的字符的例外是沒有用的。

將您的問題簡化爲簡單的發送和接收並記錄收到的內容。可見性和透明度在這裏是你的朋友。直到你知道你在得到什麼,很難看到需要什麼。

+0

我該怎麼做?我使用BufferedWriter和BufferedReader進行通信。 – Bogdacutu

+0

在構造函數中指定編碼...?或者,您可以發送一個字節[],它可以是字符串的散列值,然後反面就不用擔心了,編碼的作用也就不那麼重要了...... – Jay

+0

我添加了UTF-8,結果相同。 :( – Bogdacutu