C'è un carattere cinese che viene presentato in UTF-8 come F0 A4 AD A2. Questo personaggio è descritto qui: http://en.wikipedia.org/wiki/UTF-8C#: conversione da stringa a byte UTF-8. Perché non funziona?
U + 24B62 F0 A4 AD A2
Quando eseguo questo codice in C# ...
byte[] data = { 0xF0, 0xA4, 0xAD, 0xA2 };
string abc = Encoding.UTF8.GetString(data);
Console.WriteLine("Test: description = {0}", abc);
... ho reindirizzare l'output al file di testo e quindi aprirlo con notepad.exe scegliendo la codifica UTF-8. Mi aspetto di ottenere l'output, ma ottengo due punti interrogativi (??).
La sequenza di byte è corretta. Funziona in Perl:
print "\xF0\xA4\xAD\xA2";
In uscita, ottengo
Quindi la mia domanda è: perché ottengo "??" invece di "" in C#?
P.S. Niente di speciale con questo personaggio: ho ottenuto la stessa cosa per qualsiasi personaggio (lungo 2, 3 o 4 byte).
Nel caso Perl, da "in uscita" vuoi dire di reindirizzare l'output in un file di testo e aprirlo con il Blocco note? – yoozer8
È necessario assicurarsi di scrivere sul file usando la codifica UTF8. Puoi pubblicare il codice per scrivere nel file? –
Qualche ragione particolare per cui non è possibile utilizzare i file? Console e Unicode sono piuttosto dolorose da gestire. La risposta di Oleksandr Pshenychnyy (+1) può aiutarti in questo caso ... –