WideCharToMultiByte() 和 wcstombs() 有什么不同?何时使用哪个?
WideCharToMultiByte是一个Windows API函数,用于在CHAR中转换存储的Windows定义的多字节代码页和WCHAR中存储的UTF16之间的编码。要使用的代码页作为第一个参数传递,可以传递CP_ACP,表示系统当前区域设置中设置的针对代码页的特定代码页 - 在控制面板本地化工具“用于非Unicode程序的语言”中设置。它通过#include访问,并且仅在Windows上可用。
wcstombs是标准C运行时函数,用于在当前char *编码和wchar_t *编码之间进行转换。setlocale(我记得)可用于设置要使用的代码页。
std :: codecvt是C ++标准库模板类,在codecvt中使用,用于使用各种特性类型机制在不同编码之间转换字符串。
还有其他库,包括ICONV或ICU,也可以进行各种Unicode<->多字节转换。
WideCharToMultiByte
将UTF-16(作为Win32 WCHAR表示)转换为您选择的Win32代码页。
wcstombs
将实现定义的内部 wchar_t
表示转换为当前实现定义的内部多字节表示。WideCharToMultiByte
。如果您编写了基于标准库(而不是 Win32 API)的某些函数,这些函数使用标准 C wchar_t 字符串,则需要使用 wcstombs
。wcstombs
是一个标准函数,因此如果代码需要在除Windows以外的任何平台上运行,请使用该函数。wcstombs()
是可移植的,而 WideCharToMultiByte()
函数仅适用于 win32。
实际上,wcstombs()
调用一个特定于系统的函数,在 Win32 上很可能是一个直接调用 WideCharToMultiByte()
的函数- 不过,它也可能完全绕过该函数并直接进入内部。
无论如何,没有实际区别。
WideCharToMultiByte
将从UTF-16转换为您选择的Win32代码页。wcstombs
将从实现定义的内部wchar_t
表示转换为当前实现定义的内部多字节表示。开发人员不必知道实现定义的编码。 - Serge Dundich