2014-12-22 7 views
1

인디 10 소켓. TIdTCPServer 구성 요소. 소켓을 사용하여 서버 프로그램에 연결하는 클라이언트 프로그램이 있습니다. 작동하는 모든 것은 통신하는 데 문제가 없지만 특수 문자가있는 문자열을 서버에서 클라이언트로 보낼 수는 없습니다. 이 같은 문자열을 보낼 때 :인디 10 TidTCPServer 인코딩 문자

  AContext.Connection.IOHandler.WriteLn (' Usuário não existe') ; 

클라이언트는 문자열 수신 :

우스 리오 N을 오 existe

지금이 구성 요소를 사용했다

사람은 내가 제대로 인코딩을 설정하는 방법을 알고 이 특수 문자열을 클라이언트에게 보내려면?

답변

4

기본적으로 Indy는 다양한 인터넷 프로토콜과의 호환성을 위해 문자 인코딩으로 7 비트 ASCII를 사용합니다. 다른 문자 인코딩을 사용하려면, 당신이 필요로 다음 중 하나

  1. 어떤 읽기/쓰기를 수행하기 전에 IOHandler.DefStringEncoding 속성을 설정합니다. 문자열 기반 I/O 메소드는 기본적으로이 인코딩을 사용합니다.

    // note: use TIdTextEncoding.UTF8 if not using Indy 10.6 or later... 
    AContext.Connection.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8; 
    
  2. WriteLn()을 포함하여 다양한 문자열 기반 I/O 방법의 선택 AByteEncoding 매개 변수를 사용합니다.

    // note: use TIdTextEncoding.UTF8 if not using Indy 10.6 or later... 
    AContext.Connection.IOHandler.WriteLn('Usuário não existe', IndyTextEncoding_UTF8); 
    

없이

클라이언트는 서버의 데이터를 읽을 때 다시 유니 코드로 전송 된 바이트를 디코딩 할 수 있도록 해당 인코딩을 사용하는 것, 말을.

// note: use TIdTextEncoding.UTF8 if not using Indy 10.6 or later... 
Client.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8; 

또는 : : 예를 들어

// note: use TIdTextEncoding.UTF8 if not using Indy 10.6 or later... 
S := Client.IOHandler.ReadLn(IndyTextEncoding_UTF8); 
+0

결과 후 : AContext.Connection.IOHandler.DefStringEncoding = TIdTextEncoding.ASCII; 사용자 선호도 NAO의 existe 결과 후 : AContext.Connection.IOHandler.DefStringEncoding = TIdTextEncoding.ANSI; 유향이 존재하지 않습니다. 해결되지 않았습니다. 어떤 인코딩을 사용해야합니까? –

+0

감사합니다. 내 실수는 2 번이었고, 클라이언트는 Encoding을 사용하지 않았고, 두 번째는 ASCII 나 ANSI가 아닌 UTF8을 사용해야했습니다. 이제는 완벽하게 일했습니다. 다시 한 번 감사드립니다 !!!! –