从嵌入式应用程序从std :: string切换到std :: wstring?

时间:2020-03-06 15:02:35  来源:igfitidea点击:

到目前为止,我一直在C ++应用程序中的嵌入式系统(路由器,交换机,电信设备等)中使用std :: string。

对于下一个项目,我正在考虑从std :: string切换到std :: wstring以支持Unicode。例如,这将允许最终用户在命令行界面(CLI)中使用汉字。

我应该期待什么并发症/头痛/意外?例如,如果我使用仍使用std :: string的第三方库,该怎么办?

由于对国际字符串的支持并不是我对嵌入式系统类型的强烈要求,因此,只有在不会引起严重麻烦的情况下,我才会这样做。

解决方案

请注意,许多通信协议都需要8位字符(或者7位字符或者其他变体),因此我们经常需要在内部wchar_t / wstring数据与外部编码之间进行转换。

当需要使用Unicode字符的8位表示形式时,UTF-8编码非常有用。 (有关更多信息,请参见如何编写对UTF-8安全的代码。)但是请注意,我们可能需要支持其他编码。

越来越多的第三方库支持Unicode,但是仍然有很多不支持Unicode的库。

我真的不能告诉你这是否值得头痛。这取决于要求。如果我们是从头开始的,那么从std :: wstring开始比在以后从std :: string转换为std :: wstring容易。

std :: wstring是在Windows上保存Unicode字符串的一个不错的选择,但在大多数其他平台上则不是,并且永远不适合移植代码。最好尝试坚持使用std :: string和UTF-8.

我们可能会因为有些问题而感到头痛,因为C ++标准规定在写入文件时需要使用宽流将双字节字符转换为单字节,并且转换的实现方式取决于实现。