Поддержка строковых литералов Unicode начала в GCC 4.5.Возможно, в этом проблема.
[править]
После некоторого поиска я обнаружил, что потоки для этих новых литералов Unicode описаны в N2035 и он был включен в черновик стандарта.Согласно этому документу вам нужно u32ofstream
для вывода вашей строки, но этот класс отсутствует в библиотеке GCC 4.5 C ++ 0x.
В качестве обходного пути вы можете использовать обычный fstream:
std::ofstream fout2("output2.txt", std::ios::out | std::ios::binary);
fout2.write((const char *)str.c_str(), str.size() * 4);
Таким образом, я вывел вашу строку в UTF-32LE на моей машине Intel (которая имеет младший порядок).
[править]
Я был немногонемного ошибочен в отношении статуса u32ofstream
: согласно последнему проекту на веб-сайте Комитета по стандартам C ++ вы должны использовать std::basic_ofstream<char32_t>
, как и раньше.Этот класс будет использовать класс codecvt<char32_t,char,typename traits::state_type>
(см. Конец § 27.9.1.1), который должен быть реализован в стандартной библиотеке (поиск codecvt<char32_t
в документе), но он недоступен в GCC 4.5.