【问题标题】:Python mutagen not saving correctlyPython诱变剂未正确保存
【发布时间】:2012-06-07 18:27:40
【问题描述】:

我正在从 Excel 文档中提取文本并将它们作为 id3 标记添加到一些 mp3 文件中。我的 Excel 文档中的大多数字符都是俄语 (Unicode),但有些是英语。当我运行脚本时,所有英文标签都被正确地写入元数据,但所有俄语字符都显示为问号。如果我在控制台中打印俄语字符,它们会完美显示。为什么它们被写成问号?

Python

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!"

【问题讨论】:

  • 虽然与您当前遇到的 Unicode 问题无关,但您正在为文件夹中的每个 MP3 遍历整个 Excel 工作簿,并考虑到您之间存在直接匹配的事实您的列和文件名我只会遍历 Excel 工作簿,并根据工作簿中的文件名检查文件是否存在。
  • 你确定你运行脚本后用来读取标签的程序可以处理unicode吗?
  • 我只是将 mp3 文件移动到 Windows 机器上,并尝试在“属性”下的“详细信息”中查看标签
  • 我认为这可能是因为该软件包使用的是 ID3v1 而不是 ID3v2(据我所知 ID3v1 不支持扩展字符集/编码/其他),但查看 @987654321 的源代码@ 和它包装的模块 mutagen.id3,似乎 EasyID3 类旨在正确编码 ASCII 范围之外的字符。所以我不确定你的问题是什么,除非错误在于xlrd 处理非ASCII字符的方式。
  • 如果我在控制台打印让我们说“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 -*-,同样的错误。

标签: python unicode utf-8 mutagen


【解决方案1】:

您应该使用“解码”或/和“编码”方法。

关于:https://stackoverflow.com/a/370199/1321404的最佳答案

另一种方式:https://stackoverflow.com/a/4631545/1321404

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    相关资源
    最近更新 更多