Acrobat JS脚本添加西里尔字符菜单显示为I.eaao的编码问题咨询
乱码对应编码说明
你看到的I.eaao乱码是Acrobat菜单渲染层的编码解析逻辑导致的:JS传入的UTF-8格式西里尔字符串,被强制按Latin-1(ISO-8859-1)单字节编码解码渲染,原本占2字节的西里尔UTF-8字符被拆成2个Latin-1单字节字符显示,就出现了和原字符完全不相关的乱码内容。
可行解决方案
- 方案1:修改脚本文件存储编码
将你编写的JS脚本文件另存为带BOM的UTF-8格式,不要使用无BOM的UTF-8或ANSI编码。Acrobat的JS解释器读取外部脚本时默认会优先识别BOM头,按UTF-8解析字符串,大部分场景下可直接解决西里尔字符显示问题。 - 方案2:按系统ANSI编码转义字符
如果是在俄文版Windows环境下运行,可将西里尔菜单项名称先转换为Windows-1251编码的字节序列,直接用十六进制转义写法传入cName参数即可正常显示,示例代码如下:
// "Тест"对应的Windows-1251字节十六进制为D2 E5 F1 F2 app.addSubMenu({ cName: "\xD2\xE5\xF1\xF2", cParent: "Help", nPos: 0}) // "Пункт_меню1"对应的Windows-1251转义写法 app.addMenuItem({ cParent: "\xD2\xE5\xF1\xF2", cName: "\xCF\xF3\xED\xEA\xF2\x5F\xEC\xE5\xED\xFE\x31", nPos: 1, cExec: "Test()", cEnable: "event.rc = (event.target != null);"});
- 方案3:兼容多语言环境的写法
如果需要跨不同语言系统运行,可通过app.language判断当前Acrobat界面语言,动态传入对应编码的转义字符串即可。
内容的提问来源于stack exchange,提问作者Дмитрий Кутыркин
相关产品推荐
相关产品推荐

