我目前正在使用ICU库来处理Unicode数据,并试图通过套接字发送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::buffer
可以接受boost::asio::const_buffer
,但是我不确定给定UnicodeString
对其进行的转换如何工作。我应该如何转换为const_buffer
,或者还有另一种方法应该这样做?提前感谢您的所有回复。 最佳答案
假设您想使用UnicodeString
的默认内部编码发送数据(而不是强制使用例如UTF-8或UTF-32),那么以下方法应该可以工作:
// 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));
关于c++ - 如何使用boost::asio:write调用发送ICU UnicodeString?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5952811/