如何正确移植仅限 Win 的函数 GetMultiByteString?
我正在将最初仅适用于 Windows 的代码移植到跨平台友好的代码;一个特殊的障碍是尝试将对 Windows Unicode 函数“GetMultiByteString”(以及任何相关函数)的调用转换为更可移植的基于 wchar 的函数。我在这方面没有取得什么成功,因为在尝试迭代 Unicode 字符串时使用 wchar 会导致循环过早终止。
使用 wchar 替换 GetMultiByteString 和任何其他相关 Unicode 函数的正确方法是什么?
I'm porting code originally Windows-only to cross-platform friendly code; one particular stumbling block is trying to convert calls to the Windows Unicode function "GetMultiByteString" (and any related functions) to the more portable wchar-based functions. I'm having little success with it, as using wchar results in premature loop terminations when trying to iterate through Unicode strings.
What is the correct way to use wchar to replace GetMultiByteString and any other related Unicode functions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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。
You're trying to convert apples into oranges here. MultiByteToWideChar and WideCharToMultiByte convert between specific encodings, UTF-16 <-> a variety of other encodings, including ANSI.
3 problems:
wchar_t
is typically 4 bytes on unix boxes, not 2 bytes, so you'd have to check all of your code to ensure that the size of it was never assumed to be 2 bytes.Simply put, there is no completely portable way of dealing with these kind of things unless you write the code to do the encoding yourself.
If you want to be portable, you need to define a typedef or something so that your application uses wchar_t on windows, and char on everything else. You then must assume that UTF-16 is being used on Windows boxes, and UTF-8 is being used on unix boxes.
OR: You have to use a library, such as ICU.