如何在 C# 中为 ID3 标签编码字符串
Posted
技术标签:
【中文标题】如何在 C# 中为 ID3 标签编码字符串【英文标题】:How to encode string for ID3 tags in C# 【发布时间】:2012-06-02 22:16:22 【问题描述】:我在使用 ID3 标签编码时遇到问题。我查询了一个 Web 服务,它返回一些 XML,包括如下节点:
<name>Blue Öyster Cult</name>
然后我会使用这些信息来更新我的 ID3 标签。问题是标签更新为:
Blue Öyster Cult
我知道这是一个编码问题,但我正在努力弄清楚如何让它工作。我的理解是 ID3 标签需要编码为 ISO-8859-1。
我写了这段代码,但没什么区别:
Encoding newEncoding = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = Encoding.UTF8.GetBytes(newArtistName);
byte[] asciBytes = Encoding.Convert(utf8, newEncoding, utfBytes);
string encodedArtistName = newEncoding.GetString(asciBytes);
这方向对吗?
非常感谢任何建议。
【问题讨论】:
您使用的是 ID3v1 还是 ID3v2? ID3v1 仅支持 ASCII,而 ID3v2 可以使用 Unicode 编码。 en.wikipedia.org/wiki/ID3#ID3v2 【参考方案1】:ID3 v2
文本帧用编码字节标记。
$00 – ISO-8859-1 (ASCII).
$01 – UCS-2 (UTF-16 encoded Unicode with BOM), in ID3v2.2 and ID3v2.3.
$02 – UTF-16BE encoded Unicode without BOM, in ID3v2.4.
$03 – UTF-8 encoded Unicode, in ID3v2.4.
详细规格请见http://id3.org/id3v2-00。
另见View/edit ID3 data for MP3 files - 有类似问题的帖子。
【讨论】:
如果***的文章是正确的,它并不总是Unicode,而是有一个编码字节来选择它的编码。 en.wikipedia.org/wiki/ID3#ID3v2【参考方案2】:我遇到的问题实际上是在保存到 ID3 标签之前。我收到的 XML 设置为 UTF-8,但请求页面的 WebClient 没有。添加此处显示的第二行解决了问题。
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
String htmlCode = client.DownloadString(requestURL);
当从这个 XML 中提取值时,它具有正确的编码以保存到文件 ID3 标记中。
【讨论】:
以上是关于如何在 C# 中为 ID3 标签编码字符串的主要内容,如果未能解决你的问题,请参考以下文章
有关如何在 c# 中为 Windows 7 任务栏编码所需的信息
如何从 C++ 中的 Base64 编码字符串在 GDI+ 中创建图像?