Come faccio a superare i caratteri Unicode come una coppia di caratteri ASCII?

StackOverflow https://stackoverflow.com/questions/2633245

  •  26-09-2019
  •  | 
  •  

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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top