将包含混合字体的word文档转换为unicode

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将包含混合字体的word文档转换为unicode相关的知识,希望对你有一定的参考价值。

我有一个包含不同字体和不同语言的word文档。一个例子是英文文本和古希腊文的相应翻译。对于古希腊部分,使用了TrueType字体(https://fonts2u.com/greek-regular.font)。现在这种方法非常不适合共享这些文件,我想将古希腊语部分转换为相应的unicode字符。

我尝试了python包python-docx来导入文件。虽然成功导入和查看文件内容,但我找不到一种方法来只选择古希腊字符并将它们转换为相应的unicode字符。

我正在考虑使用TrueType字体字符映射,并使用相应的unicode字符查找并替换这些字符。然而,查看内容我无法选择古希腊字符。

问:有没有办法使用VBA,python或导出不同编码的文件来将古希腊字符“翻译”为相应的unicode字符?

答案

哇,听起来很尴尬,复杂的破碎!

鉴于字体使用自己的非标准字符编码定义,您可能更容易使用XML解析器直接处理文件。我这样做主要是因为这是我最容易选择文本的相关错误编码部分的方式。

就像是:

  1. 打开文件(Python中的ElementTree)。请注意,DOCX文件实际上是一个ZIP文件,其中包含一个名为word/document.xml的文件和其他相关图像/ misc
  2. 使用xpath选择器获取使用希腊字体的所有文本实例
  3. 使用重新映射代码从破碎的希腊语编码移动到使用真正的Unicode字符
  4. 保存文件

你想要切换到在标准unicode代码点中使用希腊字符的字体,你可以在原始XML中执行此操作,或者只是在Word中重新打开文件并在任何地方设置字体

另一答案

使用python-docx包我正在搜索并根据字体名称选择字符

import docx
doc = docx.Document('greek_text.docx')
doc.paragraphs[3].runs[10].font.name

例如,返回'希腊语'

for run in doc.paragraphs[3].runs:
    if run.font.name == "Greek":
        for char in run.text:
            print (char +" "+ str(hex(ord(char))))

g 0x67

你的0x75

n 0x6e

»0xbb

返回unicode字符和相应的十六进制值。这使得这些值的映射为其希腊字符的正确unicode值。

以上是关于将包含混合字体的word文档转换为unicode的主要内容,如果未能解决你的问题,请参考以下文章

为啥将PDF转化为word后字体和格式发生变化

在 Crystal Reports 中转换为 unicode 字体

怎么将HTML文档转换为Word文档?

如何将 ANSI 文本转换为 Unicode?

如何将 Word 文档转换为 PDF? [关闭]

word文档中的英文在更换wingdings 3字体后所有文字变成乱码怎么恢复