Obecnie piszę aplikację, która wymaga ode mnie wywoływania GetWindowText w dowolnych oknach i zapisywania tych danych do pliku w celu późniejszego przetworzenia. Krótko mówiąc, zauważyłem, że moje narzędzie zostało braku na Battlefield 3 i I zawężony problemu w dół do następnego znaku w tytule okna: http://www.fileformat.info/info/unicode/char/2122/index.htmBłąd wyjścia strumienia w standardzie Windows Unicode C++
Więc stworzyłem małą aplikację testową, która po prostu wykonuje następujące operacje:
std::wcout << L"\u2122";
Niski i wygląda, że zrywa wynik z oknem konsoli dla pozostałej części programu.
Dlaczego MSVC STL zadławił się tą postacią (i zakładam, że inni), gdy interfejsy API takie jak MessageBoxW itp. Wyświetlają to dobrze?
Jak mogę uzyskać wydruk tych znaków w moim pliku?
Testowane na VC10 i VC11 pod Windows 7 x64.
Przykro mi z powodu źle skonstruowanego postu, wydzieję sobie tutaj włosy.
Dzięki.
EDIT:
Minimal sprawdzian
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
Oczekiwany wynik: znak '™' wypisywane na konsoli i plików. Obserwowany wynik: Plik został utworzony, ale jest pusty. Brak wyjścia do konsoli.
I potwierdziły, że czcionka I "używam dla mojej konsoli jest zdolny do wyświetlania znaków w pytaniu, a plik jest na pewno pusty (0 bajtów)
EDIT:.
Dalsze debugowanie pokazuje, że „failbit” i „badbit” są ustawione w strumieniu (ów)
EDIT:.
próbowałem również używając Boost.Locale i mam ten sam problem nawet z nowym lokum nasycony globalnie i jawnie do wszystkich stoją strumienie ard.
Cóż, będę przeklęty, nasycenie, że locale UTF8 faktycznie działało ... Dlaczego, do cholery, nie jest Boost.Locale, robiąc to dla mnie?Zinterpretowałem dokumenty, że UTF-8 jest domyślnym wąskim kodowaniem, a ja na całym świecie przesadziłem locale i wszystkie statyczne strumienie, więc co do cholery ... – RaptorFactor