Мутаген Python не сохраняется правильно

Я извлекаю текст из документа Excel и добавляю его как теги id3 в некоторые файлы mp3. Большинство символов в моем документе Excel — русские (Unicode), но некоторые — английские. Когда я запускаю скрипт, все английские теги записываются как метаданные правильно, но все русские символы отображаются как вопросительные знаки. Если я печатаю русские символы в своей консоли, они отображаются отлично. Почему они пишутся как вопросительные знаки?

Питон

from mutagen.easyid3 import EasyID3
import xlrd
import glob
import re
import os
for name in glob.glob('*.mp3'):
  audio = EasyID3(name)
  wb = xlrd.open_workbook('xl.xls')
  sh = wb.sheet_by_name(u'Russian')
  col_b = 1
  col_c = 2
  col_e = 4
  col_g = 6
  col_i = 8
  col_k = 10
  for i in range(sh.nrows):
    row = sh.row_values(i)
    for j in range(len(row)):
      if row[j] == name:
        audio["title"] = sh.cell(i,col_e).value
        audio["author"] = sh.cell(i,col_i).value
        audio["copyright"] = sh.cell(i,col_g).value
        audio["album"] = sh.cell(i,col_k).value
        audio["discsubtitle"] = sh.cell(i,col_c).value
        audio.save()
print "All MP3 MetaData Parsed!"

person user1442957    schedule 07.06.2012    source источник
comment
Хотя это не относится к вашей проблеме с Unicode, которая у вас есть в настоящее время, вы перебираете всю свою книгу Excel для каждого MP3, который у вас есть в вашей папке, и учитывая тот факт, что у вас есть прямое совпадение между вашим столбцом и именем файла, я бы просто повторил через книгу Excel и для каждой строки проверьте, существует ли файл на основе имени файла в вашей книге.   -  person Christian Witts    schedule 07.06.2012
comment
Вы уверены, что программа, которую вы используете для чтения тегов после запуска ваших скриптов, может обрабатывать юникод?   -  person mfussenegger    schedule 07.06.2012
comment
Я просто перемещаю mp3-файлы на машину с Windows и пытаюсь подробно просмотреть теги в свойствах.   -  person user1442957    schedule 07.06.2012
comment
Я подумал, что это может быть из-за того, что пакет использует ID3v1, а не ID3v2 (насколько я знаю, ID3v1 не поддерживает расширенные наборы символов/кодировки/что-то еще), но просматривая источник для mutagen.easyid3 и модуль, который он содержит, mutagen.id3, похоже, класс EasyID3 предназначен для правильного кодировать символы вне диапазона ASCII. Поэтому я не уверен, в чем ваша проблема, если только ошибка не заключается в том, как xlrd обрабатывает символы, отличные от ASCII.   -  person JAB    schedule 07.06.2012
comment
Если я напечатаю значение, скажем, sh.cell(i,col_e).value в консоли, все русские символы отображаются нормально. Я даже пытался дать audio[title] буквальное значение КАК ВСЕ НАЧИНАЛОСЬ, и я получаю эту ошибку: SyntaxError: Non-ASCII character '\xd0' in file mp3.py on line 21, but no encoding declared Затем я включил # -*- coding: utf-8 -*- вверху моего скрипта, та же ошибка.   -  person user1442957    schedule 07.06.2012


Ответы (1)


вы должны использовать методы «декодировать» и/или «кодировать».

Отличный ответ о: https://stackoverflow.com/a/370199/1321404

другой способ: https://stackoverflow.com/a/4631545/1321404

person Dmitry Zagorulkin    schedule 08.06.2012