Кросс-платформенный способ преобразования UTF8 в std :: wstring

Возможный дубликат:
UTF8 в / из широкого преобразования символов в STL

Я знаю, как конвертировать UTF8 в std :: wstring с помощью MultiByteToWideChar :

std::wstring utf8to16( const char* src ) { std::vector buffer; buffer.resize(MultiByteToWideChar(CP_UTF8, 0, src, -1, 0, 0)); MultiByteToWideChar(CP_UTF8, 0, src, -1, &buffer[0], buffer.size()); return &buffer[0]; } 

но это зависит от Windows, есть ли кросс-платформенная функция C ++, которая делает то же самое, используя только stdio или iostream?

Я предлагаю использовать utf8-cpp-библиотеку, это просто и точно, когда дело доходит до utf8-строк.

этот код считывает файл UTF-8 и создает версию utf16 каждой строки, затем преобразует обратно в utf-8

 #include  #include  #include  #include  #include "utf8.h" using namespace std; int main(int argc, char** argv) { if (argc != 2) { cout << "\nUsage: docsample filename\n"; return 0; } const char* test_file_path = argv[1]; // Open the test file (contains UTF-8 encoded text) ifstream fs8(test_file_path); if (!fs8.is_open()) { cout << "Could not open " << test_file_path << endl; return 0; } string line; while (getline(fs8, line)) { // Convert the line to utf-16 vector utf16line; utf8::utf8to16(line.begin(), end_it, back_inserter(utf16line)); // And back to utf-8 string utf8line; utf8::utf16to8(utf16line.begin(), utf16line.end(), back_inserter(utf8line)); } return 0; }