如何使用 boost::asio:write 调用发送 ICU UnicodeString
How do I send an ICU UnicodeString using a boost::asio:write call?
我目前正在使用 ICU 库来处理 Unicode 数据,并尝试通过套接字发送UnicodeString
。目前正在查看使用基本时间服务器的示例:
Daytime.3 - 异步 TCP 日间服务器
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));
相关文章:
- void*到驱动程序中的UnicodeString
- 如何在 Linux for Windows 上通过 MinGW 构建静态 ICU 的 Boost
- 如何检查 UnicodeString 的字符?
- 将 Vcl::Controls::TCaption aka (System::UnicodeString) 转换为 co
- 检测 ICU 库在 VS2017 中失败
- 如何调整ICU的UnicodeString::caseCompare(或获得相同的效果)
- 如何将ICU库添加到ARM的Qt项目中
- UnicodeString 将一个子字符串替换为另一个子字符串
- 在带有brew的MacOS上链接时缺少增强ICU正则表达式符号
- Ubuntu上的库ICU不想从Unicode转换为Windows-1251
- 默认区域设置"root"在 ICU 中如何工作?
- ICU 的未解析外部符号
- icu::SimpleDate格式使用未定义类型的编译器错误
- 如何在 c++ Linux 中使用 ICU 库将 UnicodeString 转换为 windows-1251
- 构建适用于 iOS 的 ICU
- Unicode - ICU 库 - 获取 UnicodeString 中的代码点计数
- C :如何使用ICU通过给定的时区偏移来获得当前时间
- 如何使用 ICU 中的非 stl 类型(如 UnicodeString)创建unordered_map
- 如何使用 boost::asio:write 调用发送 ICU UnicodeString
- 在ICU UnicodeString中,countChar32()和length()之间的区别是什么?