LINUX.ORG.RU

id3lib


0

0

Помогите разобраться.

Решил перекодировать теги(из CP1251 в UTF8). Написал простенький скриптик
import pyid3lib
x=pyid3lib.tag("01-Это рок.mp3")
encoding="CP1251"
for i in x:
	try:
		text = i['text']
		textenc = i['textenc']
		frameid = i['frameid']
		i['text'] = unicode(text,encoding).encode("UTF8")
		i['textenc']=0
		x[x.index(frameid)] = i
	except Exception,details:
		print details


x.update()

Скриптик пробный, поэтому много лишнего.Все перекодировалось вроде хорошо. beep воспринимает это хорошо, а вот amarok все показыват кракозябрами.
(система SuSE 9.2, locale UTF8, amarok 1.2.3). Где-то видел что надо указать кодировку, а иначе все текстовые поля воспринимаются, как ISO-8859-1. В стандарте id3v2.4.0 нашел, что байт отвечающие кодировке должен быть:

$00 - ISO-8859-1
$01 - UTF-16
$02 - UTF-16BE
$03 - UTF8

Если указать i['textenc']=3, то ни beep, ни amarok этого не воспринимают. Мне кажется, что я просто чего-то не понимаю(я вообще в этом не силен).
★★

Ответ на: комментарий от anonymous

>Если beep все хорошо показывает, может тогда в amarok'e дело?

Возможно. Но в спецификации тоже об этом написано, поэтому хотелось бы разобраться прежде чем что-то делать дальше.

olegk ★★
() автор топика

Незнаю питона и не могу понять в какие теги он пишет v1 или v2?
Т.к. перекодировку тегов для amarok писал я, рассказываю как она работает:
Если у тебя в настройках стоит перекодировка то из mp3 читаются id3v1 теги и перекодируются в выбранную кодировку ... v2 будут использованы только при отсутствии v1.
Если перекодировка не выставлена то amarok сначала пытается прочитать v2 (отображает как уникод), если неудалось то пытается считать v1 (отображает как iso8859-1), если тоже не получилось, то пытается разобрать имя файла!

Delay ★★
()
Ответ на: комментарий от Delay

2Delay

В amarok "перекодировать следующие 8-битные данные" ничего не выставлено.

Насколько я понял из доков по id3lib теги сохраняются в v2.

Как это можно проверить?

>Если перекодировка не выставлена то amarok сначала пытается прочитать v2 (отображает как уникод)

Может вопрос покажется тупым, но как уникод - это UTF8?

olegk ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.