如何将std :: wstring转换为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使用等宽字符集,具体取决于系统语言。

在这一点上,您应该知道要转换的编码。如果您同时将宽原始编码转换成窄原始编码,那么您很幸运。为此有一个标准功能:std::wcsrtombs

如果两种编码都不是本机编码,则需要查找各个编码的文档,以了解每个代码单元,代码点,字形等映射到的内容。Unicode规范可以在这里找到如果要转换为非unicode,则需要决定如何处理目标编码中没有相应代码点的字符。

与往常一样,最好使用现有软件来节省时间。您可以使用iconv等现有库来跳过学习不同的编码及其转换的过程

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章