Board logo

标题: [文件操作] 命令行工具exiftool写入中文标题的测试 [打印本页]

作者: czjt1234    时间: 2024-5-6 15:33     标题: 命令行工具exiftool写入中文标题的测试

本帖最后由 czjt1234 于 2024-5-10 09:37 编辑

https://exiftool.org
https://exiftool.org/exiftool-12.83.zip
在其命令行帮助中
  1.     -charset [[*TYPE*=]*CHARSET*]
  2.          If *TYPE* is "ExifTool" or not specified, this option sets the
  3.          ExifTool character encoding for output tag values when reading and
  4.          input values when writing, with a default of "UTF8". If no
  5.          *CHARSET* is given, a list of available character sets is returned.
  6.          Valid *CHARSET* values are:
  7.              CHARSET     Alias(es)        Description
  8.              ----------  ---------------  ----------------------------------
  9.              UTF8        cp65001, UTF-8   UTF-8 characters (default)
  10.              Latin       cp1252, Latin1   Windows Latin1 (West European)
  11.              Latin2      cp1250           Windows Latin2 (Central European)
  12.              Cyrillic    cp1251, Russian  Windows Cyrillic
  13.              Greek       cp1253           Windows Greek
  14.              Turkish     cp1254           Windows Turkish
  15.              Hebrew      cp1255           Windows Hebrew
  16.              Arabic      cp1256           Windows Arabic
  17.              Baltic      cp1257           Windows Baltic
  18.              Vietnam     cp1258           Windows Vietnamese
  19.              Thai        cp874            Windows Thai
  20.              DOSLatinUS  cp437            DOS Latin US
  21.              DOSLatin1   cp850            DOS Latin1
  22.              DOSCyrillic cp866            DOS Cyrillic
  23.              MacRoman    cp10000, Roman   Macintosh Roman
  24.              MacLatin2   cp10029          Macintosh Latin2 (Central Europe)
  25.              MacCyrillic cp10007          Macintosh Cyrillic
  26.              MacGreek    cp10006          Macintosh Greek
  27.              MacTurkish  cp10081          Macintosh Turkish
  28.              MacRomanian cp10010          Macintosh Romanian
  29.              MacIceland  cp10079          Macintosh Icelandic
  30.              MacCroatian cp10082          Macintosh Croatian
复制代码
可以看到不支持GBK和GB2312
所以 http://www.bathome.net/viewthread.php?tid=2765 中提到的
exiftool.exe -charset GB2312 -XPComment="测试" dst.jpg
就不可行了
在此帖18楼有个脚本,需要另存为 utf-8 编码
  1. : & chcp 65001 & cls
  2. @echo off
  3. exiftool.exe -charset UTF8 -XPComment="测试" dst.jpg
  4. pause
复制代码
测试可行

但是,由于UTF8编码的特殊性,它本身存在一二三四五六字节的编码
所以特殊环境下可能会出现相邻的字节被错误组合的情况,也就是
http://www.bathome.net/thread-68945-1-2.html
这里提到的rem语句异常的现象

所以把该批处理中的 "测试" 改成 "测1试" 或 "QQ浏览器"
都会不能正确写入中文

https://exiftool.org/exiftool_pod.html#READING-EXAMPLES
有个示例代码
exiftool -xmp:description-de='k& uuml;hl' -E dst.jpg
使用HTML转义符写入特殊字符

"浏览器"这三个字对应的HTML转义符是 & #27983;& #35272;& #22120;
exiftool -Title="& #27983;& #35272;& #22120;" -E dst.jpg
注意复制测试时,把&后面的空格去掉,即把& #改为&#
测试成功

附一个把汉字转换为HTML转义符的 HTML.vbs
  1. Dim s, n, i, m
  2. If wsh.Arguments.Count = 0 Then wsh.Quit()
  3. s = wsh.Arguments(0)
  4. n = ""
  5. For i = 1 To Len(s)
  6.     m = CLng("&H" & Hex(AscW(Mid(s, i, 1))))
  7.     If m > 127 Then
  8.         n = n & "&#" & m & ";"
  9.     Else
  10.         n = n & Mid(s, i, 1)
  11.     End If
  12. Next
  13. wsh.Echo n
复制代码
可以在for语句中调用,示例:
cscript.exe /nologo HTML.vbs QQ浏览器

当这个办法比较啰嗦,不知道有没有别的办法可以直接完成
作者: Five66    时间: 2024-5-9 20:01

exiftool好像是这样直接解析的 , 要直接完成得将参数换成与-charset选项有相同byte的文字 , 不过像这样的文字大多看起来像乱码 , 而且也不一定有这样的字符,再加上可能还有有系统或runtime的编码转换,也不一定有效
HTML转义符大概算是最优解了

在bat里换用其他支持的程序调exiftool或许也可以直接完成




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2