2010-04-13 1 views
1

Как конвертировать (в качестве примера):Как выводить символы Unicode в виде пары символов ASCII?

Сеньор Кокосовый Y Su Conjunto - Introducción

к:

моря или ± Кокосовое Y Su Conjunto - IntroducciÃμn

У меня есть приложение, которое создает плейлисты m3u, но когда имя файла, исполнителя или названия трека содержит а не ASCII-символы, они не получают надлежащего чтения музыкальным проигрывателем, поэтому трек не воспроизводится.

Я обнаружил, что если я пишу трек, как:

#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 

Тогда музыкальный плеер будет читать правильно и воспроизведение дорожки.

Моя проблема заключается в том, что я не могу найти информацию, необходимую мне для правильного преобразования.

Я попытался следующие:

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

где playList = new StreamWriter(filename, false); но я просто получить ряд выходных чисел:

#EXTINFUTF8:76,83101195177111114326711199111110117116328932831173267111110106117110116111 - 731101161141111001179999105195181110 

который я предполагаю, являются числовые значения символов, а не персонажей.

Прошло некоторое время с тех пор, как я сделал это манипулирование персонажами низкого уровня, и я немного ржавый.

UPDATE

Я теперь получил:

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

сделать вывод и на первый взгляд, казалось бы работать. Файл, показанный в Notepad ++, показывает правильную информацию. Однако первый трек еще не воспроизводится.

+0

playList.Write ("{0}", b); это преобразует байт в номер. – Andrey

+0

@ Андрей - я это понимаю;) Я не знаю, что заменить. – ChrisF

+0

см. Мои комментарии к моему ответу – Andrey

ответ

2

Вы хотите, чтобы весь поток находился в UTF-8.Попробуйте:

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

Теперь, чтобы писать в поток, просто передать ваш String назвал output так:

playList.Write(output); 

поток теперь все будет в нужной кодировке, так что вы должны также быть просто в состоянии сделать что-то вроде:

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

Я думаю, что ты прав. Я просто проверяю это сейчас. – ChrisF

+0

Да, это так. Я осознал это сам прошлой ночью, когда я уходил спать и собирался попробовать, когда увидел ваш ответ. – ChrisF

0

хорошо, попробуйте написать, что игрок кодирования ожидает. и это utf8! (Я предполагаю)

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

видеть, что: #UTF8 в вашей выборке?

+0

Я должен был добавить, что я пробовал это, но просто получаю серию чисел. – ChrisF

+1

, то вы выводите байты в файл неправильно. я ставлю (10 баксов :)), что это utf8. просто выведите его правильно – Andrey

+2

используйте StreamWriter и передайте Encoding.Utf8 на ctor. он сделает трюк – Andrey