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

时间:2018-12-11 09:18:10

标签: python vba unicode ms-word

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

我尝试使用python软件包python-docx导入文件。尽管可以成功导入和查看文件内容,但是我找不到找到仅选择古希腊字符并将其转换为相应的unicode字符的方法。

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

问:是否可以使用VBA,python或以不同编码导出文件,以将古希腊字符“翻译”为相应的unicode字符?

2 个答案:

答案 0 :(得分:1)

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

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

类似:

  1. 打开文件(在Python中为ElementTree)。请注意,DOCX文件实际上是一个ZIP文件,其中包含一个名为word/document.xml的文件以及其他适当的相关图片/杂项
  2. 使用xpath选择器获取所有使用希腊字体的文本实例
  3. 使用您的重新映射代码从破碎的希腊编码转换为使用真实的Unicode字符
  4. 保存文件

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

答案 1 :(得分:1)

我正在使用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

u 0x75

n 0x6e

»0xbb

返回unicode字符和相应的十六进制值。这样就可以将这些值映射到其希腊字符的正确unicode值。