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