升压语言环境的string转换:在Windows和Linux上的不同行为

这是我的示例代码:

#pragma execution_character_set("utf-8") #include <boost/locale.hpp> #include <boost/algorithm/string/case_conv.hpp> #include <iostream> int main() { std::locale loc = boost::locale::generator().generate(""); std::locale::global(loc); #ifdef MSVC std::cout << boost::locale::conv::from_utf("grüßen vs ", "ISO8859-15"); std::cout << boost::locale::conv::from_utf(boost::locale::to_upper("grüßen"), "ISO8859-15") << std::endl; std::cout << boost::locale::conv::from_utf(boost::locale::fold_case("grüßen"), "ISO8859-15") << std::endl; std::cout << boost::locale::conv::from_utf(boost::locale::normalize("grüßen", boost::locale::norm_nfd), "ISO8859-15") << std::endl; #else std::cout << "grüßen vs "; std::cout << boost::locale::to_upper("grüßen") << std::endl; std::cout << boost::locale::fold_case("grüßen") << std::endl; std::cout << boost::locale::normalize("grüßen", boost::locale::norm_nfd) << std::endl; #endif return 0; } 

Windows 7上的输出是:

 grüßen vs GRÜßEN grüßen grußen 

Linux上的输出(openSuSE 12.3)是:

 grüßen vs GRÜSSEN grüssen grüßen 

在Linux上,德语字母“ß”被转换为“SS”,而这个字符在Windows上保持不变。

问:为什么这样? 我如何纠正转换?

一些注意事项:Windows控制台代码页设置为1252.在这两种情况下,语言环境都设置为de_DE。 我尝试用“de_DE.UTF-8”replace上面列表中的默认语言环境设置 – 没有任何影响。 在Windows上,这个代码是用Visual Studio 2013编译的,在Linux上用GCC 4.7,c ++ 11启用。

任何build议表示赞赏 – 在此先感谢您的支持!

Solutions Collecting From Web of "升压语言环境的string转换:在Windows和Linux上的不同行为"

Windows不会做这种转换,因为如果字符串长度突然改变,开发人员会觉得太“混乱”。 推测大概只是将所有的Unicode转换委托给底层的Windows API

资源

我想,处理它的强大方法是使用ICU等第三方Unicode库。