好吧,所以我最近又回到了C++。自从我看过任何C / ++代码至今已有13年了。

我正在设计用于Windows的软件,而我正在努力实现的第三方代码(例如libssh2)严格是UTF-8,并且不提供其他宽字符API实现。回到Windows,我见过的每个API都使用UTF-16(wchar_t)。

所以我的问题是:每次使用非标准Windows实现(例如libssh2)时,我是否都被迫进行字符串转换?我有一个作为wchar返回的变量,但libssh2 API仅提供了char实现。

我应该坚持使用char而不是wchar_t吗?如果这样做,我将被迫再次转换为wchar_t以使用Windows API。我在代码中使用了多个第三方资源和多个Windows API。我头疼。

这里的最佳做法是什么?

最佳答案

最好的选择是使用您最经常在各处使用的编码,并在每个端点进行转换。在这种情况下,听起来好像您想在任何地方使用UTF-8字符串,并转换为UTF-16,然后在每个Windows API调用点(或一组调用,如果它们是连续的)返回,因为听起来您拥有更多外部调用比Windows API调用。希望这会限制您必须实际执行的转换次数,并且应该表现得相当不错。如果您发现这样的转换太慢,请确保使用仪器,然后查看是否还有其他可用于转换的API(请参阅Raymond Chen的“加载字典”子系列以获取有关后者的详细信息。 ,但请记住Knuth关于过早优化的准则)。

关于c++ - 在与不兼容的char API一起使用宽字符时确定最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37598876/

10-11 22:45
查看更多