2011-05-10 2 views
2

현재 ICU 라이브러리를 사용하여 유니 코드 데이터를 처리하고 있으며 소켓을 통해 UnicodeString을 보내려고합니다. 현재 기본 시간 서버를 사용하여 예를보고 : 이제boost :: asio : write 호출을 사용하여 ICU UnicodeString을 보내려면 어떻게해야합니까?

Daytime.3 - An asynchronous TCP daytime server

boost::asio::async_write(socket_, boost::asio::buffer(message_), 
    boost::bind(&tcp_connection::handle_write, shared_from_this(), 
    boost::asio::placeholders::error, 
    boost::asio::placeholders::bytes_transferred) 
); 

을, 나는 다양한 기능 서명을 통해 검토 한 결과와 boost::asio::const_buffer를 취할 수 boost::asio::buffer 것처럼 보이는,하지만 난 모르겠어요 UnicodeString으로 주어진 변환 방법에 대해 설명합니다. const_buffer으로 변환하려면 어떻게해야합니까? 아니면이 작업을 수행해야하는 다른 방법이 있습니까? 모든 응답에 대해 미리 감사드립니다.

+0

어떤 인코딩 당신이 원하는 게를 데이터를 보내시겠습니까? UTF-8? UTF-32? – ildjarn

+0

@ildjarn 답장을 보내 주셔서 감사합니다. UTF-32로 데이터를 보내고 싶습니다. –

답변

3

당신이 (대신 예 : UTF-8 또는 UTF-32 강제로) UnicodeString의 기본 내부 인코딩을 사용하여 데이터를 전송하려는 가정하면, 다음 작동합니다 :

// given UnicodeString ustr 
boost::asio::const_buffer(ustr.getBuffer(), ustr.length() * sizeof(UChar)); 

UnicodeString::getBuffer()UnicodeString::length()를 참조하십시오 자세한 정보.

편집 (응답 언급하는) : 정규화 UTF-32 데이터를 보내이 같은 (오류 처리를 추가하고 확장 개체 수명 필요) 시도하려면

UErrorCode err = U_ZERO_ERROR; 
int32_t const size = ustr.toUTF32(0, 0, err); 
err = U_ZERO_ERROR; 
std::vector<UChar32> databuf(size); 
ustr.toUTF32(&databuf[0], size, err); 
boost::asio::const_buffer(&databuf[0], databuf.size() * sizeof(UChar32)); 
+0

답장을 보내 주셔서 감사합니다. 이것이 내가 찾고있는 답변입니다! –

관련 문제