来源:http://www.cppblog.com/mythma/archive/2012/09/11/wstring_convert_utf8.html
原先的C++程序如果想转换宽字符到UTF8必须使用WINAPI的函数来进行处理.新C++标准(TR11..)添加了对国际化的支持.我们可以使用C++标准中的编码转换支持来完成这项工作:
#include <iostream> #include <string> #include <locale> #include <codecvt> #include <fstream> int main(int argc, char *argv[]) { std::wstring str = L"天朝文"; //宽字符--UTF8转换 std::wstring_convert<std::codecvt_utf8<wchar_t>> conv; //由于是wstring转换器,to_bytes表示转换到UTF8 std::string narrowStr = conv.to_bytes(str); { std::ofstream ofs ("c:\\test.txt"); ofs << narrowStr; } //from_bytes表示从字节流转换到wstring std::wstring wideStr = conv.from_bytes(narrowStr); { //由于是从字节流转换到宽字符,需要指定locale,否则会转换失败 std::locale::global(std::locale("Chinese-simplified")); std::wofstream ofs (L"c:\\testW.txt"); ofs << wideStr; } }
关于C++的编码转换(本地多字节-UTF8-UTF16-UTF32-宽字符)详见:http://en.cppreference.com/w/cpp/locale/wstring_convert