Come faccio a superare i caratteri Unicode come una coppia di caratteri ASCII?
Domanda
Come mi convertisco (ad esempio):
Señor Coconut y su Congiunto - Introlucciõn
a:
Seã ± o Coconut y su Congiunto - Introlucciãµn
Ho un'app che crea playlist M3U, ma quando il nome file, l'artista o il titolo contiene personaggi non ASCII, non viene letta correttamente dal lettore musicale in modo che la traccia non venga riprodotta.
Ho scoperto che se scrivo la traccia come:
#EXTINFUTF8:76,Señor Coconut Y Su Conjunto - Introducciõn
#EXTINF:76,Señor Coconut Y Su Conjunto - Introducciõn
#UTF8:01-Introducciõn.mp3
01-Introducciõn.mp3
Quindi il lettore musicale lo leggerà correttamente e suonerà la traccia.
Il mio problema è che non riesco a trovare le informazioni di cui ho bisogno per essere in grado di fare correttamente la conversione.
Ho provato quanto segue:
byte[] byteArray = Encoding.UTF8.GetBytes(output);
foreach (Byte b in byteArray)
{
playList.Write(b);
}
dove playList = new StreamWriter(filename, false);
Ma ottengo solo una serie di numeri output:
#EXTINFUTF8:76,83101195177111114326711199111110117116328932831173267111110106117110116111 - 731101161141111001179999105195181110
Che immagino siano i valori numerici dei personaggi piuttosto che dei personaggi stessi.
È passato un po 'di tempo da quando ho fatto questa manipolazione di carattere di basso livello e sono un po' arrugginito.
AGGIORNARE
Ora ho:
byte[] byteArray = Encoding.UTF8.GetBytes(output);
foreach (Byte b in byteArray)
{
playList.Write(Convert.ToChar(b));
}
Fare l'output e a prima vista sembrava funzionare. Il file come visualizzato in Notepad ++ mostra le informazioni corrette. Tuttavia, la prima traccia non viene ancora riprodotta.
Soluzione
Vuoi che l'intero flusso sia in UTF-8. Provare:
StreamWriter playList = new StreamWriter(filename, false, System.Text.Encoding.UTF8);
Ora, per scrivere in streaming, passa il tuo String
di nome output
come questo:
playList.Write(output);
Il flusso ora sarà tutti nella codifica corretta, quindi dovresti anche essere in grado di fare qualcosa di simile:
playList.WriteLine("#EXTINFUTF8:76,Señor Coconut Y Su Conjunto - Introducciõn");
Altri suggerimenti
Bene, prova a scrivere il giocatore di codifica si aspetta. Ed è UTF8! (suppongo)
byte[] bytesToWrite = Encoding.Utf8.GetBytes(yourString);
guarda quello: #UTF8
nel tuo campione?