我正面临一些编码问题,我无法找到正确的解决方案。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