Как вывести символы Unicode в виде пары символов ASCII? - PullRequest
1 голос
/ 14 апреля 2010

Как конвертировать (как пример):

Señor Coconut Y Su Conjunto - Introducciõn

до:

Се или кокос Y Su Conjunto - Введение

У меня есть приложение, которое создает списки воспроизведения 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 ++, показывает правильную информацию. Однако первая дорожка все еще не воспроизводится.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Вы хотите, чтобы весь поток был в 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 голосов
/ 14 апреля 2010

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

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

видите, что: #UTF8 в вашем образце?

...