c++11 - 如何在保持字符的同时加宽标准字符串?
问题描述
我有一个函数来获取 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::string
为wchar_t*
同时保持国际字符?
解决方案
简短的回答:你不能。
更长的答案:std::string
包含char
通常在前 127 个值中包含 ASCII 的元素,而其他所有内容(“国际字符”)都在上面的值中(或负数,如果char
已签名)。为了确定wchar_t
字符串中的相应表示,您首先需要知道源字符串中的编码(可能是 ISO-8859-15 甚至 UTF-8)和目标字符串中的编码(通常是 UTF-16、UCS2或 UTF-32),然后进行相应的转码。
推荐阅读
- reactjs - Webpack错误1又一个'无法读取属性'
- javascript - HTML 按钮 - 按住按钮时将重复该操作
- c++ - 在 C++ 二叉搜索树中实现旋转绝对是煎熬
- r - R Shiny 地图搜索输入框
- node.js - Expressjs 路线与 graphql-yoga
- google-sheets - 在 Google 表格的下拉列表中选择一个选项后,水平自动填充一行
- regex - 正则表达式 - 获取 2 个字符串之间的字符串
- java - 如何在不使用集合或哈希集但使用给定哈希集表的情况下获得两个集合的并集?
- amazon-web-services - 无法从笔记本电脑访问公共子网中的极光集群
- ubuntu-16.04 - cloud-config 似乎没有运行脚本-per-once、runcmd 或 per-boot 模块