올바른 해결책을 찾을 수없는 인코딩 문제가 있습니다.C# TCP 서버와 Java TCP 클라이언트 간의 인코딩 문제
XML을 수신하고 응답하는 창 서비스로 실행되는 C# TCP 서버가 있는데, 스페인어 문자 (예 : á, é, í 및 기타)가있는 특수 문자를 출력 할 때 문제가 발생합니다.
서버 응답이 UTF-8로 인코딩되고 Java 클라이언트가 UTF-8을 사용하여 읽는 중입니다. 그러나 출력물을 출력 할 때 문자는 완전히 다릅니다.
이 문제는 Java 클라이언트에서만 발생합니다 (C# TCP 클라이언트는 예상대로 작동 함).
는 다음을 보여줍니다 서버 코드의 조각이다 인코딩 문제 :이 간단한 테스트를 들면
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);
}
, 출력 쇼는 다음과 같습니다 :
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);
}
자바 클라이언트가 C#을 서버
ß
각 언어의 [] 바이트를 인쇄하는 일부 테스트를 수행했습니다. 및 C# A를 출력하는 동안에 같이 자바 바이트 195, 161
는 []로 인쇄 읽어
가이 서명 된 (자바)으로해야 할 것 -61, -95, 부호 (C 번호)?
모든 의견을 크게 환영합니다. 일반적으로 BOM을 포함하여 해결 될 것
이 ... http://de.wikipedia.org/wiki/Byte_Order_Mark을 볼 날이으로
하지 대답하지만, 데이터 포인트 어쨌든 - 당신이 의도 한대로 파이썬은 C# 버전을 디코딩을 수행합니다. '인쇄' '.join (x의 CHR (X)를에 [195, 161]) 디코딩 ('utf-8') -> '. 해당 순서를 보존하려고하면 java의 utf-8이 유효한 utf-8이 아닌 것 같습니다. – viraptor
감사합니다. 아직 실험 중입니다. (운 없음 지금까지). – jcgarciam
나는 abbers 예제에서 실수를했다. (이미 편집 중이다.) java byte []에서 -61, -95로 인쇄한다. 유효한 UTF8 문자입니다. 문제는 OS (창) 자체에있는 것처럼 보입니다. 잘못된 문자를 출력하는 이상한 설정이 무엇인지 모르겠습니다. – jcgarciam