我正面臨一些編碼問題,我無法找到正確的解決方案。C#TCP服務器和Java TCP客戶端之間的編碼問題
我有一個C#TCP服務器,作爲接收和響應XML的窗口服務運行,當在輸出中傳遞特殊字符(如帶有重音符號的西班牙語字符(如á,é,í等))時,問題就出現了。
服務器響應正在編碼爲UTF-8,並且java客戶端正在使用UTF-8進行讀取。但是當我打印輸出時,角色完全不同。
此問題只發生在Java客戶端(C#TCP客戶端按預期工作)。
以下是服務器代碼的片段,顯示的編碼問題: C#服務器
byte[] destBytes = System.Text.Encoding.UTF8.GetBytes("á");
try
{
clientStream.Write(destBytes, 0, destBytes.Length);
clientStream.Flush();
}catch (Exception ex)
{
LogErrorMessage("Error en SendResponseToClient: Detalle::", ex);
}
Java客戶端:
socket.connect(new InetSocketAddress(param.getServerIp(), param.getPort()), 20000);
InputStream sockInp = socket.getInputStream();
InputStreamReader streamReader = new InputStreamReader(sockInp, Charset.forName("UTF-8"));
sockReader = new BufferedReader(streamReader);
String tmp = null;
while((tmp = sockReader.readLine()) != null){
System.out.println(tmp);
}
對於這個簡單的測試,輸出顯示的是:
ß
我做了一些測試,打印出每種語言的字節[]並同時在C#中的輸出爲: 195,161
在java中的byte []讀取打印爲: -61,-95
這會不會有簽名的(JAVA)做無符號(C# )的字節類型?
任何反饋,非常感謝。
不是一個答案,但一個數據點反正 - Python做解碼C#版本,你打算:'打印'。加入(對於x CHR(x)在[195,161])進行解碼( 'utf-8') - >á'。顯然,如果我嘗試保持這個順序,java的一個不是有效的utf-8。 – viraptor
謝謝,我還在試驗。 (到目前爲止沒有運氣)。 – jcgarciam
我在上面的例子中犯了一個錯誤(我已經編輯它),在java byte []中打印爲:-61,-95。這是一個有效的UTF8字符。問題似乎在於操作系統(窗口)本身。我不知道它有什麼奇怪的設置打印錯誤的字符。 – jcgarciam