2017-05-19 2 views
0

네트워크 소켓에서 UTF-8로 인코딩 된 바이트 스트림을 읽고 이러한 문자를 계속 해석하는 서버 프로그램을 작성하고 있습니다.유니 코드 바이트 스트림을 문자로 디코딩하는 방법

한 바이트 이상을 나타내는 문자의 경우 소켓의 첫 번째 바이트 만 수신되고 프로그램에서이 바이트를 잘못된 문자로 해석합니다. 예를 들어

는, 클라이언트 코드 아래 실행 - 서버가 처음 세 바이트를 수신하면

String s = "Cañ"; 

    byte[] b = s.getBytes("UTF-8"); 

    //sending first three bytes 
    send(b, 0, 3)); //send(byte[], offset, length) 

    //sending last byte 
    send(b, 3, 1); 

, 그것은 칼슘로 디코딩?

어떻게 서버에서 문자 경계를 감지 할 수 있습니까?

주어진 코드는 문제를 해결하기 위해 작성되었습니다. 문자는 TCP에 의해 가끔 깨졌습니다.

+3

가능한 복제 http://stackoverflow.com/questions/8512121/utf-8-byte-to-string –

+0

서버가 정확히 얼마나 "바이트"를 수신합니까? 문자 데이터를 읽을 때는 원시 InputStream을 읽지 말고 문자와 UTF-8 같은 것을 알고있는 InputStreamReader로 감싸 주어야한다. –

답변

0

TCP 프로토콜은 안정적이므로 네트워크에 문제가 발생하면 일부 패킷이 손실 될 수 있습니다. U는 프로토콜을 직접 디자인 할 수 있습니다. 프로토콜 데이터 프레임의 첫 번째 및 마지막 태그를 설정하여 전체 데이터를 쉽게 수신했는지 확인할 수 있습니다.

관련 문제