2010-04-13 3 views
1

Comment puis-je convertir (par exemple):Comment afficher les caractères Unicode sous la forme d'une paire de caractères ASCII?

Señor Coconut Y Su Conjunto - INTRODUCCION

à:

Seà ± ou coco Y Su Conjunto - IntroducciÃμn

J'ai une application qui crée des listes de lecture m3u, mais quand le nom de fichier de la piste, l'artiste ou le titre contient s les caractères non ASCII ne sont pas lus correctement par le lecteur de musique afin que la piste ne soit pas lue.

J'ai découvert que si j'écris la piste comme:

#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 

Ensuite, le lecteur de musique va lire correctement et lire la piste.

Mon problème est que je ne peux pas trouver l'information dont j'ai besoin pour pouvoir faire la conversion correctement.

J'ai essayé ce qui suit:

byte[] byteArray = Encoding.UTF8.GetBytes(output); 
    foreach (Byte b in byteArray) 
    { 
     playList.Write(b); 
    } 

playList = new StreamWriter(filename, false); mais je viens d'obtenir une série de numéros de sortie:

#EXTINFUTF8:76,83101195177111114326711199111110117116328932831173267111110106117110116111 - 731101161141111001179999105195181110 

que je suppose que sont les valeurs numériques des personnages plutôt que la les personnages eux-mêmes.

Cela fait un moment que j'ai fait cette manipulation de personnage de bas niveau et je suis un peu rouillé.

MISE À JOUR

J'ai maintenant:

byte[] byteArray = Encoding.UTF8.GetBytes(output); 
    foreach (Byte b in byteArray) 
    { 
     playList.Write(Convert.ToChar(b)); 
    } 

à faire la sortie et à première vue, il semblait travailler. Le fichier tel que vu dans Notepad ++ montre les informations correctes. Cependant, la première piste n'est toujours pas jouée.

+0

playList.Write ("{0}", b); cela convertit les octets en nombres. – Andrey

+0

@Andrey - Je me rends compte que;) Je ne sais pas quoi remplacer avec. – ChrisF

+0

voir mes commentaires pour ma réponse – Andrey

Répondre

2

Vous souhaitez que le flux entier soit en UTF-8.Essayez:

StreamWriter playList = new StreamWriter(filename, false, System.Text.Encoding.UTF8); 

Maintenant, pour écrire dans le flux, juste passer votre String nommé output comme ceci:

playList.Write(output); 

Le flux va maintenant être tous dans le codage correct, donc vous devriez aussi être juste capable de faire quelque chose comme:

playList.WriteLine("#EXTINFUTF8:76,Señor Coconut Y Su Conjunto - Introducciõn"); 
+0

Je pense que vous avez raison. Je vérifie juste ceci maintenant. – ChrisF

+0

Oui - c'est ce qu'il a fait. Je l'ai réalisé moi-même la nuit dernière alors que j'allais dormir et que j'étais sur le point de l'essayer quand j'ai vu ta réponse. – ChrisF

0

Bien, essayez d'écrire le lecteur d'encodage attend. et c'est utf8! (Je suppose)

byte[] bytesToWrite = Encoding.Utf8.GetBytes(yourString); 

voir que: #UTF8 dans votre échantillon?

+0

J'aurais dû ajouter que j'avais déjà essayé, mais je voulais juste une série de chiffres. – ChrisF

+1

alors vous produire des octets à un fichier incorrectement. Je parie (10 dollars :)) que c'est utf8. juste la sortie correctement – Andrey

+2

utilisez StreamWriter et passez Encoding.Utf8 à ctor. il va faire l'affaire – Andrey

Questions connexes