2016-12-26 11 views
0

Когда я вставить строку с акцентами, он не отображается в файле «FAKE.txt» (UTF-16 кодирования)широкие строки с акцентами не выводимый

std::wifstream ifFake("FAKE.txt", std::ios::binary); 
     ifFake.imbue(std::locale(ifFake.getloc(), 
     new std::codecvt_utf16<wchar_t, 0x10ffff, std::consume_header>)); 
     if (!ifFake) 
     { 
     std::wofstream ofFake("FAKE.txt", std::ios::binary); 
     ofFake << L"toc" << std::endl; 
     ofFake << L"salut" << std::endl; 
     ofFake << L"autre" << std::endl; 
     ofFake << L"êtres" << std::endl; 
     ofFake << L"âpres" << std::endl; 
     ofFake << L"bêtes" << std::endl; 
     } 

Результат (FAKE.txt) TOC Salut Autre

остальные ударением слова не написано (ошибка потока я думаю).

Программа была скомпилирована с g ++, а кодировка исходного файла - UTF-8.

Я заметил такое же поведение с выходом консоли.

Как это исправить?

ответ

1

Потому что вы не сделали imbue местонахождение для ofFake.

ниже код должен работать хорошо:

std::wofstream ofFake("FAKE.txt", std::ios::binary); 
    ofFake.imbue(std::locale(ofFake.getloc(), 
       new std::codecvt_utf16<wchar_t, 0x10ffff, std::generate_header>)); 
    ofFake << std::wstring(L"toc") << std::endl; 
    ofFake << L"salut" << std::endl; 
    ofFake << L"autre" << std::endl; 
    ofFake << L"êtres" << std::endl; 
    ofFake << L"âpres" << std::endl; 
    ofFake << L"bêtes" << std::endl; 

Хотя, только MSVC++ двоичный сделает UTF-16 кодированный файл. g ++ похоже, что делает кодированный файл UTF8 с некоторой бесполезной спецификацией.

Таким образом, я рекомендую использовать utf8 вместо:

std::wofstream ofFake("FAKE.txt", std::ios::binary); 
    ofFake.imbue(std::locale(ofFake.getloc(), new std::codecvt_utf8<wchar_t>)); 
    ofFake << L"toc" << std::endl; 
    ofFake << L"salut" << std::endl; 
    ofFake << L"autre" << std::endl; 
    ofFake << L"êtres" << std::endl; 
    ofFake << L"âpres" << std::endl; 
    ofFake << L"bêtes" << std::endl; 
+0

Спасибо! Вы правы в g ++. Я попробую ваше второе решение. – Aminos

 Смежные вопросы

  • Нет связанных вопросов^_^