繁体   English   中英

如何将 std::wstring 转换为 char const []

[英]How to convert std::wstring to char const[]

我一直在尝试将 wstring 转换为 char[] 到目前为止没有成功。 这些类型是完全不兼容的,还是有办法从一种转换为另一种?

到目前为止,我已经尝试了以下两种方法,但都没有成功。

char const testTwo[] = testOne;
char const testTwo[] = testOne.c_str();

首先,您必须了解std::wstring是如何编码的。 您应该查看获取该字符串的 API 的文档。

std::wstring通常以系统本机范围编码进行编码。 本机编码是什么,应在您所针对的系统的文档中指定。 不同系统的原生编码通常不同,如果您打算针对多个系统,则需要注意这一点。 Windows 的原生宽编码是 UTF-16,而 POSIX 通常使用 UTF-32。

接下来,您需要决定您打算对窄字符数组使用什么编码。 选择可能取决于您打算如何处理窄字符串。 一个典型的常见选择是 UTF-8 或系统本机窄编码。 就像宽编码一样,本机窄编码是系统特定的。 UTF-8 在 POSIX 系统上相当常见,而 Windows 使用恒定宽度字符集,这取决于系统的语言。

此时,您应该知道要转换的编码是什么。 如果您同时将宽本机编码转换为窄本机编码,那么您很幸运。 为此有一个标准的 function : std::wcsrtombs

如果其中任何一种编码不是本机编码,那么您需要查找相应编码的文档,了解每个代码单元、代码点、字形等 map 的用途。 Unicode 规范可以在这里找到。 如果您要转换为非 unicode,那么您需要决定如何处理在目标编码中没有相应代码点的字符。

与往常一样,使用现有软件节省时间是个好主意。 您可以使用现有的库(例如iconv )跳过学习不同的编码及其转换。

PS您可能无法在编译时知道生成的窄字符串的长度,因此您可能需要动态分配数组。 这也意味着数组不能是 const。 我建议为此目的使用std::string

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM