C++11標準增加了一些新的類模板用於改進對國際化和本地化的支持。其中,std::wstring_convert、std::codecvt_utf8等類的出現解決了以往C++難以實現在Unicode到UTF-8以及CJK等本地多字節編碼之間轉換文本的問題,現在終於不用再去勞煩第三方庫和MultiByteToWideChar/WideCharToMultiByte等繁瑣的WindowsAPI了。
下面的代碼演示瞭如何利用這些新類,結合原有的codecvt機制,將UTF-8編碼的原始字符串轉換爲Unicode,然後再轉換爲中文GBK編碼。
#include<tchar.h>
#include<locale>
#include<codecvt>
#include<iostream>
int_tmain(intargc,_TCHAR*argv[])
{
std::stringmystring("\xe4\xb8\xad\xe6\x96\x87");//UTF-8編碼的“中文”字符串
std::wstring_convert<std::codecvt_utf8<wchar_t>>cvt_utf8;//UTF-8<->Unicode轉換器
std::wstring_convert<std::codecvt<wchar_t,char,std::mbstate_t>>cvt_ansi(newstd::codecvt<wchar_t,char,std::mbstate_t>("CHS"));//GBK<->Unicode轉換器
std::wstringws=cvt_utf8.from_bytes(mystring);//UTF-8轉換爲Unicode
std::stringmyansistr=cvt_ansi.to_bytes(ws);//Unicode轉換爲GBK
std::cout<<myansistr<<std::endl;
return0;
}
注:以上代碼在VisualStudio2010SP1/2012環境下編譯通過。