【发布时间】:2013-07-26 00:19:56
【问题描述】:
我遇到了诸如
之类的错误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)
【问题讨论】:
-
这可能有助于显示您的代码,从您获得原始字节输入的位置到您收到此错误的位置。并显示整个堆栈跟踪。
-
unicode 是运行名为 hsaudiotag 的音乐文件标签读取程序的直接输出。错误是由 print 或 write 语句生成的。我也得到 UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in position 1: ordinal not in range(128)
-
请完全按照我的要求去做。我不在乎这是从什么输出的。
-
我会将此报告为 hsaudiotag 中的错误;这些值应该永远以这种方式解码。
-
@IgnacioVazquez-Abrams 我希望我错过了一些 unicode 问题。唉,就我的目的而言,hsaudiotag 比替代品要好得多,而且似乎没有得到积极维护。我想摆脱最初的十六进制字符和空格
标签: python unicode python-unicode