我见过很多C ++社区的人(尤其是freenode上的## c ++)对wstrings
和wchar_t
的使用以及它们在windows api中的使用表示不满。 wchar_t
和wstring
究竟是什么“错误”,如果我想支持国际化,那么广泛字符有哪些替代方案?
答案 0 :(得分:18)
wchar_t没有“错误”。问题是,在NT 3.x天,微软决定Unicode是好的(它是),并将Unicode实现为16位,wchar_t字符。因此,大多数90年代中期的微软文献几乎等同于Unicode == utf16 == wchar_t。
遗憾的是,事实并非如此。在所有情况下,“宽字符”在所有平台上不必须为2个字节。
这是关于“Unicode”的最好的引用之一(独立于这个问题,独立于C ++)我见过:我高度推荐它:
我真的相信处理“8位ASCII”与“Win32宽字符”与“wchar_t-in-general”的最佳方式只是接受“Windows不同”......并相应地编码。
... IMHO
PS:
我完全赞同上面的jamesdlin:
在Windows上,你真的没有选择。它的内部API是 为UCS-2设计,从那时起它是合理的 在可变长度的UTF-8和UTF-16编码之前 标准化。但现在他们支持UTF-16,他们最终得到了 两个世界中最糟糕的。
答案 1 :(得分:-3)
强制性阅读:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
如果你用Java或.Net(VB.Net或C#)编程 - 它在很大程度上是一个非问题:默认情况下都是Unicode。如果您使用“经典”Win32 API编程,最好的办法是使用TCHAR和_T()宏(而不是明确地使用wchar)。
我认为所有Microsoft编译器VS2005及更高版本默认为C / C ++的16位(部分原因是我仍然使用MSVS 6.0;)。
另一个好处(虽然有点过时的链接):