我最初将Windows代码移植到跨平台友好代码中;一个特殊的绊脚石试图将对Windows Unicode函数“GetMultiByteString”(和任何相关函数)的调用转换为更易于移植的基于wchar的函数。我没有成功,因为在尝试迭代Unicode字符串时,使用wchar会导致过早的循环终止。
使用wchar替换GetMultiByteString和任何其他相关Unicode函数的正确方法是什么?
答案 0 :(得分:1)
你想在这里把苹果变成橙子。 MultiByteToWideChar和WideCharToMultiByte在特定编码之间进行转换,UTF-16< - >各种其他编码,包括ANSI。
3个问题:
wchar_t
在unix框上通常为4个字节,而不是2个字节,因此您必须检查所有代码以确保其大小从未假设为2个字节。简单地说,除非你自己编写代码进行编码,否则没有完全可移植的方式来处理这些事情。
如果你想要可移植,你需要定义一个typedef或类似的东西,以便你的应用程序在windows上使用wchar_t,并在其他所有内容上使用char。然后你必须假设在Windows机箱上使用UTF-16,并且在unix机箱上使用UTF-8。
或者:您必须使用库,例如ICU。