2012-08-01 2 views
0

ASCII 테이블 외부에있는 "á"같은 문자가 포함 된 Windows 소켓 연결을 통해 문자열을 보내려고합니다. std :: string, cout, ofstream 및 소켓을 사용하는 문자 집합

std::string message("á"); 
retval = send(conn_socket, message.c_str(), message.length(), 0); 

그래서 제가 조사를 시작하고 내가 UTF8 같은 것을 사용하여 인코딩 할 필요가 건너 온 : 나는 이런 식으로 뭔가를하려고 할 때 다른 쪽 끝을오고 쓰레기를들을 수 있습니다.

방법 올 std::ofstream << message 것이다 cout << message 의지 출력 쓰레기 동안, á 정확하게 출력 : 난 여전히 C++에서이 작업을 수행 할 수있는 간단한 방법을 찾고 있어요 동안, 나는 내가 발견 스트림 동작에 대한 질문이? 2의 차이점은 무엇입니까? 소켓을 통해 이러한 문자를 보낼 때 이점을 활용할 수 있습니까?

답변

0

std::ofstream으로 파일에 쓸 때 문자를 나타내는 바이트가 파일에 직접 쓰여지고 파일을 여는 응용 프로그램이 해당 바이트를 문자로 다시 변환합니다. cout에 쓸 때 콘솔은 바이트를 문자로 해석합니다. 콘솔과 응용 프로그램은 바이트 인코딩에 동의 할 필요가 없습니다. Windows 콘솔은 특히 UTF-8을 원할지라도 코드 페이지 해석을 고집합니다.

+0

s.c_str() 만 사용하여 소켓을 통해 std :: string을 보내면 왜 망쳐 버리는 것입니까? 소켓을 통해 문자열을 보내는 올바른 방법은 무엇입니까? –

+0

@ FernandoFaria, 소켓의 양쪽에 문자의 바이트 인코딩에 동의해야합니다. 문자열이 생성되는 방법이나 다른 쪽에서 사용되는 방법을 모른 채로 대답하는 것은 불가능합니다. 소켓 자체는 문자열을 전혀 변경하지 않습니다. 답장을 보내 주셔서 감사합니다. –

+0

! 나는 그것의 요점을 이미 가지고 있다고 생각한다. 나의 마지막 질문은 utf-8을 std :: string 's와 결합시키는 우아한 방법으로 간주되는 것이다. 나는 std :: string의 각 요소가 더 이상 문자가 아니라는 것을 이해한다. std :: string s (utf8 (_U ("áéíó)))와 같은 것을 성취하는데 무엇이 사용되는지 궁금하다. ... 감사합니다! !! –