从std::string转换为std::wstring用于嵌入式应用程序?

4

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

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

我应该预料到哪些复杂性/麻烦/惊喜?例如,如果我使用一个仍然使用std::string的第三方库,会发生什么情况?

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

3个回答

1
请注意,许多通信协议需要8位字符(或7位字符或其他变体),因此您经常需要在内部wchar_t/wstring数据和外部编码之间进行转换。
当您需要具有Unicode字符的8位表示时,UTF-8编码非常有用。(有关更多信息,请参见如何编写安全的UTF-8代码?)但请注意,您可能需要支持其他编码。
越来越多的第三方库支持Unicode,但仍有很多不支持。
我无法告诉您是否值得头疼。这取决于您的要求。如果您从头开始,则使用std::wstring比稍后从std::string转换为std::wstring更容易。

没错。你可以使用字符串来表示UTF-8编码,而英文字符将会和ASCII编码中的一样被表示。 - Lev

1

在 Windows 上,std::wstring 是保存 Unicode 字符串的好选择,但在大多数其他平台上,它并不适用,并且对于可移植的代码也不是一个好的选择。 最好尝试使用 std::string 和 UTF-8。


真的吗?你能详细说明一下吗?我认为STL库非常便携。-- Cayle. - Bruno Rijsman
1
STL是可移植的,但是C++在这一点上是Unicode不可知的,只有在某些平台上你可以假设wstring包含UTF-16编码的字符串(Windows)。在其他平台上,它可能是UTF32(Linux)甚至取决于环境设置(Solaris)。 - Nemanja Trifunovic

1

这是使用默认 local 的行为。可以通过在与流相关联的 local 中设置适当的属性来修改此行为。 - Martin York
相关问题中引用的答案:https://dev59.com/KEbRa4cB1Zd3GeqPwxT_ +1 - stukelly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接