虚拟打印机项目:PS文件转含俄文TXT遇Unicode问题求助
解决PS文件含俄文时ps2ascii转换TXT乱码的问题
我之前处理多语言PS文件转换时也踩过ps2ascii的坑,它对非拉丁字符的Unicode支持确实有限,给你几个经过验证的解决办法:
方法1:先转PDF再用pdftotext提取文本
既然你已经能用ps2pdf正常生成包含俄文的PDF,那可以借助pdftotext(poppler工具集的一部分)来提取UTF-8编码的文本,它对多语言字符支持更友好:
- 先用ps2pdf生成PDF:
ps2pdf input.ps input.pdf - 再用pdftotext指定UTF-8编码提取文本:
这个方法的优势是利用你已经验证过的PDF转换流程,避免直接处理PS的字体映射问题。pdftotext -enc UTF-8 input.pdf output.txt
方法2:用Ghostscript的txtwrite设备直接转换
Ghostscript自带的txtwrite设备专门针对Unicode文本输出优化,比ps2ascii的兼容性强很多,直接用它处理PS文件:
gs -dNOPAUSE -dBATCH -sDEVICE=txtwrite -sOutputFile=output.txt -sTextEncoding=UTF-8 input.ps
-sTextEncoding=UTF-8强制输出UTF-8编码,确保俄文字符被正确编码- 如果你的PS文件里俄文字体是自定义的,可以加上
-sFONTPATH=/path/to/your/fonts指定字体路径,让Ghostscript能找到对应字符映射
方法3:检查并修复PS文件的字体嵌入
如果以上方法还是有问题,大概率是PS文件里的俄文字体没有嵌入,导致转换工具无法解析字符:
- 先用Ghostscript检查PS文件中的字体:
gs -dNOPAUSE -dBATCH -c "input.ps (r) file runpdfbegin {/Font findresource /FontName get ==} forall quit" - 输出结果里如果看到俄文字体是外部引用(比如没有
/Embedded标记),需要将对应的字体文件放到Ghostscript的默认字体目录(通常是/usr/share/ghostscript/fonts/或Windows下的C:\Program Files\gs\gsX.X.X\fonts\),再重新转换。
额外注意事项
- 转换完成后,用支持UTF-8的文本编辑器(比如Notepad++、VS Code)打开TXT文件,确保编辑器编码设置为UTF-8,避免因为编码不匹配导致的“假乱码”。
内容的提问来源于stack exchange,提问作者ant_dev
相关产品推荐
相关产品推荐

