1

我收到错误,例如

UnicodeEncodeError('ascii', u'\x01\xff \xfeJ a z z', 1, 2, 'ordinal not in range(128)'

我也得到了诸如

u'\x17\x01\xff \xfeA r t   B l a k e y'

我将 \x01\xff\xfe 识别为 BOM,但如何将它们转换为明显的输出(Jazz 和 Art Blakey)?

这些来自读取音乐文件标签的程序。

我尝试了各种编码,例如 s.encode('utf8'),以及各种解码后跟编码,但均未成功。

按照要求:

from hsaudiotag import auto
inf = 'test.mp3'
song = auto.File(inf)
print song.album, song.artist, song.title, song.genre

> Traceback (most recent call last):   File "audio2.py", line 4, in
> <module>
>     print song.album, song.artist, song.title, song.genre   File "C:\program files\python27\lib\encodings\cp437.py", line 12, in encode
>     return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode character u'\xfe' in
> position 4 : character maps to <undefined>

如果我将打印语句更改为

with open('x', 'wb') as f:
    f.write(song.genre)

我明白了

Traceback (most recent call last):
  File "audio2.py", line 6, in <module>
    f.write(song.genre)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in position 1:
ordinal not in range(128)
4

1 回答 1

0

对于您的实际问题,您需要将字节而不是字符写入文件。称呼:

f.write(song.genre.encode('utf-8'))

你不会得到错误。您可以使用io.open自动完成编码来获取可以写入的字符流,即:

with io.open('x', 'wb', encoding='utf-8') as f:
    f.write(song.genre)

将 Unicode 输入控制台可能有些困难(尤其是在 Windows 下)——请参阅 PrintFails

但是,正如评论中所讨论的,您所拥有的看起来不像是工作标签值......它看起来更像是一个损坏的 ID3v2 帧数据块,可能无法恢复。我不知道这是否是您的标签阅读库中的错误,或者您只是有一个带有垃圾标签的文件。

于 2013-07-26T14:00:08.307 回答