c ++ jak pisać/czytać ofstream w Unicode/utf8


Mam plik tekstowy UTF-8, który czytam prostym plikiem:
ifstream in("test.txt");

Teraz chciałbym utworzyć nowy plik, który będzie zakodowany w UTF-8 lub Unicode.
Jak mogę to zrobić z
ofstream
lub czymś innym?
Tworzy to kodowanie ansi.
ofstream out(fileName.c_str(), ios::out | ios::app | ios::binary);

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

OK, o opcji przenośnej. Jest to łatwe, jeśli używasz standardu
C ++ 11
(ponieważ istnieje wiele dodatków, takich jak
„utf8”
, które rozwiązują ten problem na zawsze).
Ale jeśli chcesz używać starego standardowego kodu międzyplatformowego, możesz użyć tej metody do pisania ze strumieniami:
  • Przeczytaj artykuł na temat UTF to Stream Converter http://www.codeproject.com/Art ... reams
  • Dodaj
    stxutif.h
    do swojego projektu z powyższych źródeł
  • Otwórz plik w trybie ANSI i dodaj zestawienie komponentów na początku pliku, na przykład:
    std::ofstream fs;fs.open(filepath, std::ios::out|std::ios::binary);unsigned char smarker[3];smarker[0] = 0xEF;smarker[1] = 0xBB;smarker[2] = 0xBF;fs << smarker;fs.close();
  • Następnie otwórz plik jako
    UTF
    i zapisz w nim swoją zawartość:
    std::wofstream fs;fs.open(filepath, std::ios::out|std::ios::app);std::locale utf8_locale(std::locale(), new utf8cvt<false>);fs.imbue(utf8_locale); fs << ..// Write anything you want...

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się