首页 > 解决方案 > 如何在保持字符的同时加宽标准字符串?

问题描述

我有一个函数来获取 astd::string并将其更改为wchar_t*. 我目前的加宽功能看起来像这样

wchar_t* widen(const std::string& str){  
    wchar_t * dest = new wchar_t[str.size()+1];
    char * temp = new char[str.size()];
    for(int i=0;i<str.size();i++)
        dest[i] = str[i];
    dest[str.size()] = '\0';
    return dest;
}  

这适用于标准字符,但是(我不敢相信这在以前不是问题)当我有 á、é、í、ó、ú、ñ 或 ü 之类的字符时,它会中断并且结果很大不同的。
例如:我的str进来为"Database Function: áFákéFúnctíóñü"
dest最终为:"Database Function: £F£k←Fnct■￳￱"

如何从 a 更改std::stringwchar_t*同时保持国际字符?

标签: c++11stdstringwchar-t

解决方案


简短的回答:你不能。

更长的答案:std::string包含char通常在前 127 个值中包含 ASCII 的元素,而其他所有内容(“国际字符”)都在上面的值中(或负数,如果char已签名)。为了确定wchar_t字符串中的相应表示,您首先需要知道源字符串中的编码(可能是 ISO-8859-15 甚至 UTF-8)和目标字符串中的编码(通常是 UTF-16、UCS2或 UTF-32),然后进行相应的转码。


推荐阅读