我讀了其他關於這個問題的SO問題,沒有任何解決我的問題,所以我覺得這個帖子不是重複的。發送unicode字符串到服務器套接字
我想發送一個Unicode字符串從android客戶端套接字到服務器套接字但是我從服務器(我在Windows上使用c#服務器)接收所有Unicode字符作爲問號。我使用WireShark來監視網絡,並將所有Unicode字符顯示爲點。這是我的發送代碼:
String msg = "تست سوکت";
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(msg);
out.flush();
一些StackOverflow上的問題說,加入charSetEncoder
到OutputStreamWriter
constractor可以解決這一點,但,這不是爲我工作,結果是一樣的:
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(),
Charset.forName("UTF-8").newEncoder())),
true);
// Or
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(),
"UTF-8")),
true);
我嘗試之後將字節數組作爲字符串發送,但不向服務器發送任何內容:
byte[] byteArray = msg.getBytes(Charset.forName("UTF-8"));
out.println(byteArray.toString() + "\n");
你確定問題出在java客戶端代碼中,而不是在服務器C#代碼中? – Gavriel
'之後,我嘗試發送字符數組作爲字符串,'。這不是一個好主意。你應該發送字節數組本身。所以你不能使用println()。使用write()。試用msg.getBytes。你當然應該顯示接收的C#代碼。 – greenapps
@Gavriel問題出在服務器代碼上,但wireShark的結果讓我相信這是客戶端問題。謝謝你的幫助。 –