| View previous topic :: View next topic |
| Author |
Message |
Orion9

Joined: 01 Jan 2024 Posts: 1043
|
(Separately) Posted: Sat Mar 14, 2026 00:28 Post subject: |
|
|
| AkulaBig wrote: | | Но есть плагин, который лишь иногда крякозябры выводит. Можно ли взять значение из плагина и прогнать его через известную функцию фикса кодировки? |
Теперь понятно о каком плагине была речь.
Autorun действительно может вытянуть данные из любого wdx-плагина. Для этого используется объект Plugin
| Code: | Func GetExifInfoWdx(FileName)
Local str
obj = Plugin("ExifToolWDX")
If ERROR = 0 Then
obj.FileName = FileName
str = obj.GetValue(215) # поле "Comment" номер 215 в плагине
Free(obj)
Else
str = "Plugin error " & ERROR
Endif
Return str
EndFunc |
Функция вернет строку из поля Comment плагина ExifToolWDX. Но если данные хранятся в ANSI, а не в UTF-8, то результатом окажутся заменяющие символы со знаком вопроса, как у вас на картинках. И сделать с этим ничего не получится — так возвращает данные сам плагин ExifToolWDX, автор которого не предусмотрел работу с ANSI.
Остается только выводить данные в консоль и передавать их в Autorun через ProcessExecGetOutput для дальнейшей обработки.
Чем-то это похоже на проблему с кракозябрами в mp3 тегах, только здесь вместо iso-8859 выступает UTF-8. Алгоритм тоже похож: Autorun получает данные в ANSI, делает копию строки в UTF-8, разбивает обе строки на элементы и помещает их в массивы. Далее сравнивает эдементы каждого массива и делает замены при обнаружении символа 0xFFFD.
| Code: | RegisterCommand 60045 "ExifInfo"
Func ExifInfo(FileName)
Local sFile = RequestCopyDataInfo("SP") & RequestCopyDataInfo("SN")
If Not FileExist(sFile) Then
ShowHint("Файл не существует " & sFile)
Return
EndIf
MsgBox(GetExifInfo(sFile))
EndFunc
Func GetExifInfo(FileName)
Static a = List(), u = List(), exif = COMMANDER_PATH & "\Plugins\wlx\ExifToolView\exiftool.exe"
Local ansi, utf8, wrong = Chr(0xFFFD)
ProcessExecGetOutput ansi %exif% ' -G -S -lang ru "%FileName%"'
Local nSize = StrLen(ansi)
Local buf = Buffer(nSize)
buf.Zero()
buf.SetStr(ansi, 0, nSize, "ANSI")
utf8 = buf.GetStr(0, nSize, "CP:65001")
Free(buf)
a.Count = 0
u.Count = 0
a.Text = ansi
u.Text = utf8
For i = 0 to u.Count - 1
If StrPos(u[i], wrong) Then u[i] = a[i]
Next
Return u.text
EndFunc |
В результате "выхлоп" корректно отображает и ANSI и UTF-8, если обе кодировки присутствуют в тегах файла.
Надеюсь, это как-то поможет. Непонятно только, что вы хотите делать со всей этой огромной кучей потенциальных полей. Они ведь тоже динамически будут появляться и исчезать в зависимости от типа файлов.
| AkulaBig wrote: | | И про это писал. Могли-бы они использовать внешние кодеки, можно было-бы покапаться. |
Под внешними кодеками вы имеете в виду переносимые вместе с плеером? Имхо, там любая поддержка должна быть. Автор годами держит проект на плаву. Но я посмотрю завтра, что там в настройках. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1043
|
(Separately) Posted: Sat Mar 14, 2026 12:51 Post subject: |
|
|
AkulaBig
Продолжу свою мысль.
Если выводить поля из exiftool, то без фильтра, видимо, не получится обойтись. Автор ExifToolWDX.wdx использует для этого шаблоны Config*.txt, где можно самостоятельно указывать, какие поля выводить, а какие нет. Подход, в целом, на мой взгляд, правильный — лучше сходу все-равно не придумаешь. Однако шаблоны не обновлялись 10 лет, а exiftool за это время далеко ушел. Минус подхода еще в том, что для того, чтобы сделать жадный до полей шаблон, придется с головой уйти в изучение всех мета-данных, которые выводит exiftool. Задача тягомотная, на мой взгляд, и не стоит усилий, особенно на фоне тормозов это утилиты. Вот если нужно вывести что-то конкретное, типа гео-данных, тогда да. А в остальном же...
В общем, глянул я последний MPC-BE — у него кодеки вшиты прямо в EXE — куда же еще лучше? Но в настройках можно и на внешние преключиться при желании. Странно, что автор сам не сделал плагин для ТС за все эти годы, неужели никто его не просил. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|