Стандартная библиотека C ++ не поддерживает Unicode. char
и wchar_t
не обязательно должны быть кодировками Unicode.
В Windows wchar_t
- это UTF-16, но в стандартной библиотеке нет прямой поддержки имен файлов UTF-8 (тип данных char
не является Unicode в Windows)
В MSVC (и, следовательно, в Microsoft STL) предоставляется конструктор для файловых потоков, который принимает имя файла const wchar_t*
, что позволяет создать поток в виде:
wchar_t const name[] = L"filename.txt";
std::fstream file(name);
Однако эта перегрузка не указана стандартом C ++ 11 (она гарантирует только наличие версии на основе char
). Он также отсутствует в альтернативных реализациях STL, таких как GCC libstdc ++ для MinGW (-w64), начиная с версии g ++ 4.8.x.
Обратите внимание, что точно так же, как char
в Windows не UTF8, в других ОС wchar_t
может не быть UTF16. Так что в целом это вряд ли будет портативным. Открытие потока с заданным wchar_t
именем файла не определено в соответствии со стандартом, и указание имени файла в char
s может быть затруднено, поскольку кодировка, используемая char, варьируется в зависимости от операционной системы.