powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl - Вопрос по кодировкам
4 сообщений из 4, страница 1 из 1
Perl - Вопрос по кодировкам
    #40032464
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть скрипт на Perl , который осуществляет перекодировку тэгов в mp3.
Все работает, в процессе работы выводится такой результат (в консоли локаль utf-8):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
mp3_tag_iconv-0.9c.pl -n -v -f cp1251 'Грег Джой - Двойные озера.mp3' 
Processing Грег Джой - Двойные озера.mp3...
ID3v2 tag exists.
FRAME - TALB
CONVERT cp1251 => utf-8
TBW===> TALB => Кельтская гитара
FRAME - COMM
CONVERT cp1251 => utf-8
TBW===> COMM (Text) => 
CONVERT cp1251 => utf-8
TBW===> COMM (Language) => eng
CONVERT cp1251 => utf-8
TBW===> COMM (Description) => 
CONVERT cp1251 => utf-8
TBW===> COMM (encoding) => 0
FRAME - TIT2
CONVERT cp1251 => utf-8
TBW===> TIT2 => Двойные озера
FRAME - TPE1
CONVERT cp1251 => utf-8
TBW===> TPE1 => Грег Джой
Имя файла (в строчке Processing) закодировано в ISO-8859-1, видимо в файловой системе используется именно эта кодировка.
Хочу это поправить.
Делаю так:
Код: php
1.
2.
3.
   my $mp3 = MP3::Tag->new($file);
   $file = decode("iso-8859-1", $file);
   debug("Processing $file...");


Но ничего не меняется.
Как нужно преобразовать $file, чтобы получить читаемые имена файлов?
...
Рейтинг: 0 / 0
Perl - Вопрос по кодировкам
    #40032483
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Все работает
Т.е. проблема только лишь в выводе в консоль, а заданный в качестве аргумента файл 'Грег Джой - Двойные озера.mp3' находится скриптом в файловой системе и успешно обрабатывается.
Если так, тогда предположу, что имя файла на вход скрипта поступает в utf-8, а в скрипте непосредственно при выводе в консоль для имени файла делается лишнее преобразование "из однобайтовой в многобайтовую", вроде latin1 - > utf-8. Возможно, делается неявно. В этом смысле убрать следует лишнее, а не преобразовывать дополнительно.

Для тестирования/отладки добавил бы вывод имени файла из разных точек скрипта без каких-либо преобразований непосредственно в лог-файл, а не в консоль. Там можно и кодировку уточнить, чтобы не гадать насчет
Alibek B.
закодировано в ISO-8859-1, видимо в файловой системе используется именно эта кодировка.


PS: Скрипт не глядел.
...
Рейтинг: 0 / 0
Perl - Вопрос по кодировкам
    #40032486
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В скрипте никаких лишних преобразований я не нашел.
Берется @ARGV, по нему в цикле (foreach my $file @ARGV) запускается процедура, обрабатывающая файл (в которой и находится искомый фрагмент).

Кстати, помогло сделать $file = decode("utf-8", $file);
Причем даже если это преобразование сделать до my $mp3 = MP3::Tag->new($file), файл mp3 все равно успешно открывается и парсится.
...
Рейтинг: 0 / 0
Perl - Вопрос по кодировкам
    #40032491
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

проверять лень, но:

попробуй закомментировать свои 'декоды' и запустить с ключом -CL

Код: powershell
1.
perl -CL mp3_tag_iconv-0.9c.pl -n -v -f cp1251 'Грег Джой - Двойные озера.mp3' 
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl - Вопрос по кодировкам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]