本帖最后由 czjt1234 于 2024-5-10 09:37 编辑
https://exiftool.org
https://exiftool.org/exiftool-12.83.zip
在其命令行帮助中- -charset [[*TYPE*=]*CHARSET*]
- If *TYPE* is "ExifTool" or not specified, this option sets the
- ExifTool character encoding for output tag values when reading and
- input values when writing, with a default of "UTF8". If no
- *CHARSET* is given, a list of available character sets is returned.
- Valid *CHARSET* values are:
- CHARSET Alias(es) Description
- ---------- --------------- ----------------------------------
- UTF8 cp65001, UTF-8 UTF-8 characters (default)
- Latin cp1252, Latin1 Windows Latin1 (West European)
- Latin2 cp1250 Windows Latin2 (Central European)
- Cyrillic cp1251, Russian Windows Cyrillic
- Greek cp1253 Windows Greek
- Turkish cp1254 Windows Turkish
- Hebrew cp1255 Windows Hebrew
- Arabic cp1256 Windows Arabic
- Baltic cp1257 Windows Baltic
- Vietnam cp1258 Windows Vietnamese
- Thai cp874 Windows Thai
- DOSLatinUS cp437 DOS Latin US
- DOSLatin1 cp850 DOS Latin1
- DOSCyrillic cp866 DOS Cyrillic
- MacRoman cp10000, Roman Macintosh Roman
- MacLatin2 cp10029 Macintosh Latin2 (Central Europe)
- MacCyrillic cp10007 Macintosh Cyrillic
- MacGreek cp10006 Macintosh Greek
- MacTurkish cp10081 Macintosh Turkish
- MacRomanian cp10010 Macintosh Romanian
- MacIceland cp10079 Macintosh Icelandic
- MacCroatian cp10082 Macintosh Croatian
复制代码 可以看到不支持GBK和GB2312
所以 http://www.bathome.net/viewthread.php?tid=2765 中提到的
exiftool.exe -charset GB2312 -XPComment="测试" dst.jpg
就不可行了
在此帖18楼有个脚本,需要另存为 utf-8 编码- : & chcp 65001 & cls
- @echo off
- exiftool.exe -charset UTF8 -XPComment="测试" dst.jpg
- 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- Dim s, n, i, m
- If wsh.Arguments.Count = 0 Then wsh.Quit()
- s = wsh.Arguments(0)
- n = ""
- For i = 1 To Len(s)
- m = CLng("&H" & Hex(AscW(Mid(s, i, 1))))
- If m > 127 Then
- n = n & "&#" & m & ";"
- Else
- n = n & Mid(s, i, 1)
- End If
- Next
- wsh.Echo n
复制代码 可以在for语句中调用,示例:
cscript.exe /nologo HTML.vbs QQ浏览器
当这个办法比较啰嗦,不知道有没有别的办法可以直接完成 |