如何将Unicode字符输出为一对ASCII字符?

时间:2010-04-13 21:12:27

标签: c# unicode m3u

我如何转换(作为示例):

  

SeñorCoconutY Su Conjunto - Introducciõn

为:

  

Señ或Coconut 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

我猜是字符的数值而不是字符本身。

自从我完成了这种低级角色操作以来,已经有一段时间了,我有点生疏。

更新

我现在有了:

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

进行输出,乍一看似乎有效。 Notepad ++中显示的文件显示正确的信息。但是,第一首曲目仍未播放。

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

好吧,试着写下编码播放器的期望。它是utf8! (我猜)

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

在样本中看到:#UTF8