打印编码字符串

2024-09-30 08:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python开发自己的mp3解码器,但是我在解码ID3标签时有点卡住了。我不想使用现有的库,如诱变剂或eyeD3,但遵循ID3v2规范。你知道吗

问题是帧数据是以某种格式编码的,我无法打印,使用调试器我看到值“Hideaway”,但前面有一些奇怪的字符,如您在这里看到的:

'data': '\\x00Hideaway'

我有以下问题:那是什么样的编码?我如何解码和打印那个字符串?你认为其他mp3文件在ID3标签中使用不同的编码吗?你知道吗

顺便说一下,我在文件的顶部使用了utf-8声明

# -*- coding: utf-8 -*- 

我使用python中的常规I/O方法读取文件(read()


Tags: 文件数据规范编码格式标签解码器解码
1条回答
网友
1楼 · 发布于 2024-09-30 08:27:13

字符\\x00表示值为零的单个字节在H之前。所以,你的字符串看起来像这样:

Zero - H - i - d - e ...

通常字符串中有字母或数字,而不是零。也许这种用法是ID3v2特有的?你知道吗

考虑到IDC3v2标准(http://id3.org/id3v2.4.0-structure),我们看到它是:

Frames that allow different types of text encoding contains a text
encoding description byte. Possible encodings:

 $00   ISO-8859-1 [ISO-8859-1]. Terminated with $00.
 $01   UTF-16 [UTF-16] encoded Unicode [UNICODE] with BOM. All
       strings in the same frame SHALL have the same byteorder.
       Terminated with $00 00.
 $02   UTF-16BE [UTF-16] encoded Unicode [UNICODE] without BOM.
       Terminated with $00 00.
 $03   UTF-8 [UTF-8] encoded Unicode [UNICODE]. Terminated with $00.

所以,我们看到零字节表示ISO-8859-1编码,一直到下一个零字节。你知道吗

您的程序可能会这样处理:

title = fp.read(number_of_bytes)
if(title[0] == '\x00')
    title = title[1:].decode('iso8859-1')
elif(title[0] == ... something else ...)
    title = title[1:].decode('some-other-encoding')
...

相关问题 更多 >

    热门问题