首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何正确移植Win-only函数GetMultiByteString?

如何正确移植Win-only函数GetMultiByteString?
EN

Stack Overflow用户
提问于 2010-07-27 04:03:31
回答 1查看 149关注 0票数 0

我将最初只支持Windows的代码移植到跨平台友好的代码中;一个特别的障碍是试图将对Windows Unicode函数"GetMultiByteString“(以及任何相关函数)的调用转换为更可移植的基于wchar的函数。我使用wchar的成功很少,因为在尝试迭代Unicode字符串时,使用wchar会导致循环提前终止。

使用wchar替换GetMultiByteString和任何其他相关Unicode函数的正确方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2010-07-27 04:13:26

在这里,您正在尝试将苹果转换为橙子。MultiByteToWideChar和WideCharToMultiByte之间的转换特定的编码,UTF-16 <->各种其他编码,包括美国国家标准。

3个问题:

  1. C标准库中的char <-> wchar_t函数操作的编码是由实现定义的。它可以在UCS-2和ASCII、EBDIC或任何数量的其他代码页之间进行转换。您不能用这些函数替换windows函数,因为您不能假设wcstombs和mbstowcs实际上正在谈论UTF-16,或者实际上正在谈论ASCII。通常,它们在unix机器上实际使用的编码是UTF-32。
  2. unix机器通常不识别UTF-16 --它们都是基于UTF-8的,如果它们在unix机器上支持unicode,那么在unix机器上通常是4字节,而不是2字节,所以你必须检查你的所有代码,以确保它的大小从未被假定为2字节。

简而言之,除非您自己编写代码进行编码,否则没有完全可移植的方法来处理这类事情。

如果你想成为可移植的,你需要定义一个类型定义或者其他的东西,这样你的应用程序就可以在windows上使用wchar_t,而在其他所有东西上使用char。然后,您必须假设在Windows计算机上使用UTF-16,在unix计算机上使用UTF-8。

或者:你必须使用一个库,比如ICU。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3338551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档