目前在c ++中处理unicode支持的最佳方法是什么?
说我有一个像这样的简单函数:
std::wstring window::getTypeW(){
return createType;
}
我可以添加一个简单的非宽函数,如下所示:
std::string window::getType(){
std::string stype(createType.begin(),createType.end());
return stype;
}
这不是什么大问题,但是当函数变得更复杂时,变体有很多选项。
示例:的
int window::attachMenu(const std::string& str){
if (veil.menu!=NULL){
DestroyMenu(veil.menu);
veil.menu=NULL;
}
ulti::element el;
el.setStr(str);
recurseElementForMenu(veil.menu,el,this);
return 1;
}
选项:
我们可以复制代码,使广泛和非广泛的变体同样快速。
我们可以在字符串和wstring之间进行即时转换,从而消除重复的代码。
在某些情况下,我们可以使用模板(我知道如何使这项工作在使用时需要为每个函数显式输入)
我们可以使用...宏...并让用户手动选择unicode支持。
要点:
这适用于我的小GUI库(它工作得很好,减去深度unicode支持)所以我想做出最好的长期决策 - 看起来支持数百个重复功能似乎是一场噩梦。但是因为这是一个库,我确实希望尽可能少的处理时间...所以转换似乎是一个更大的浪费。
问题:
简单地支持unicode并完全取消非unicode支持在新的库中是否可以接受?
是否有一些方法可以让我为unicode和unicode制作单一功能?
还有其他方法我没考虑过吗?
答案 0 :(得分:2)
解决这个问题的一个显而易见的方法是尽可能简单地做到这一点。
在你的系统中,use UTF-8. All the time.当你与一个需要别的东西的系统对话时,将你的UTF-8字符串转换成其他东西"其他东西"也许。当系统以其他格式传回一个字符串时,几乎立即将其转换为UTF-8。
这样,您就不必在系统范围内进行任何代码重复。特定于平台的格式仅用于系统的外围。
这会影响性能吗?有可能。但可能并不明显,除非你有一个非常糟糕的UTF-8到UTF-16转换器。
答案 1 :(得分:0)
统一您的任何non-ascii
邮件的编码,建议使用UTF-8
。以下是How-to
:
LibIconv
(也可在Windows上使用)转换为UTF-8。