我有做这样的事情代码:如何检查是否到wchar_t的铸造“失败”
char16_t msg[256]={0};
//...
wstring wstr;
for (int i =0;i<len;++i)
{
if((unsigned short)msg[i]!=167)
wstr.push_back((wchar_t) msg[i]);
else
wstr.append(L"_<?>_");
}
,你可以看到它使用了一些比较难看的硬编码(我不知道它的工作原理,但它适合我的数据),以找出是否wchar_t的铸造“失败”(即替换字符的值) 从维基:
替换字符(通常是一个黑色钻石与白色 问题标记)是代码点中的Unicode标准中找到的符号U + FFFD在Specials表中。当系统不能将数据流解码为正确的符号时,它被用来指示问题。它 是最常见的,当一个字体不包含字符,但 也看到当数据是无效的,不匹配任何字符:
所以我有2个问题:1。 是否有正确的方法来做到这一点很好? 2.是否有其他字符,如替换字符,表示转换失败?
编辑:我在Linux上使用gcc所以wchar_t是32位,我之所以需要这个演员工作是因为奇怪的wstrings杀死我的glog库。 :)也wcout死亡。 :(:)
只要你的平台的'wchar_t'至少有16位宽,演员就不能*失败*。对于'sizeof(wchar_t)> = sizeof(char16_t)''的静态断言将会诀窍,而不需要运行时代码。 –
我不认为这就是他的意思是“失败”。当然,他的意思是超出了C++的范围。 –
是的,失败我的意思是获取替换字符,而不是意义上的文件失败打开失败 – NoSenseEtAl