Attualmente sto scrivendo un'applicazione che richiede di chiamare GetWindowText su finestre arbitrarie e di archiviare tali dati in un file per l'elaborazione successiva. Per farla breve, ho notato che il mio strumento stava venendo a mancare su Battlefield 3, e ho ristretto il problema verso il basso per il carattere seguente nella sua titolo della finestra: http://www.fileformat.info/info/unicode/char/2122/index.htmErrore uscita flusso Unicode C++ di Windows
così ho creato una piccola applicazione di prova, che fa proprio il seguente:
std::wcout << L"\u2122";
Basso ed ecco che interrompe l'output alla finestra della console per il resto del programma.
Perché MSVC STL si soffoca su questo personaggio (e ne assumo altri) quando le API come MessageBoxW ecc lo visualizzano correttamente?
Come posso stampare quei caratteri sul mio file?
Testato su VC10 e VC11 su Windows 7 x64.
Scusate per il post mal costruito, mi sto strappando i capelli.
Grazie.
EDIT:
Minimal banco di prova
#include <fstream>
#include <iostream>
int main()
{
{
std::wofstream test_file("test.txt");
test_file << L"\u2122";
}
std::wcout << L"\u2122";
}
Risultato atteso: '™' carattere stampato a consolare e file. Risultato osservato: il file viene creato ma vuoto. Nessuna uscita per console.
mi hanno confermato che il tipo di carattere I "m usando per la mia console è in grado di visualizzare il personaggio in questione, e il file è decisamente vuoto (0 byte di dimensione)
EDIT:.
Ulteriori debug mostra che la 'failbit' e 'badbit' sono impostate nel flusso (s)
EDIT:.
ho anche provato con Boost.Locale e sto avendo lo stesso problema anche con il nuovo locale permeato globalmente ed esplicitamente a tutti flussi ardenti.
Beh, sarei dannato, perché l'ambientazione UTF8 funzionava davvero ... Ora perché diavolo non è Boost.Locale a farlo per me?Ho interpretato i documenti dicendo che l'UTF-8 è considerata la codifica ristretta predefinita, e ho imbustato le impostazioni internazionali a tutti i flussi statici, quindi che diavolo ... – RaptorFactor