Как создать слово DOCX, используя Python DOCX на другом языке, чем английский? - PullRequest
0 голосов
/ 02 июня 2019

Я создаю программу, создающую печатные выходные данные из кода Python. Далее, финальный шрифт, содержащий другой язык (сингальский). Я хочу использовать Python Docx, чтобы сохранить этот вывод в текстовом документе. Как написать слово на другом языке?

Моя цель - создать программу для составления отчетов на другом языке (сингальский). Я взял все пользовательские данные из виджетов и сумел напечатать полученные строки на другом языке в Python. Теперь я хочу записать эти строки в файл слова, используя сингальский язык.

a= "කණ්ඩියේ උස මීටර් 5.0 ක් පළල මීටර් 2.0 හා දිග මීටර් 2.0 ක් පමණ වන කොටසක් 
අස්ථාවර වී"


document = Document()
document.add_heading("python word doc")
document.add_paragraph(a)

document.save('****\\report.docx')

когда я использую английский, код выполняет свою работу. Но для сингальского языка я не уверен, как это сделать? Я получаю следующее сообщение об ошибке для языка синала.

ValueError: Все строки должны быть совместимы с XML: Unicode или ASCII, без NULL-байтов или управляющих символов

1 Ответ

0 голосов
/ 02 июня 2019

Код ошибки, который вы видите, не имеет прямого отношения к языку. Единственное, что Word знает о языке, это какой словарь правописания использовать. В противном случае его текст представляет собой произвольную последовательность символов Юникода.

Что я подозреваю, так это то, что кодировка Unicode сингальских строк, которые вы пытаетесь написать, не является UTF-8. Другая возможность состоит в том, что строка содержит некоторые управляющие символы (как упомянуто в сообщении об ошибке), особенно вертикальную вкладку (VT, 0xB или десятичное число 11), которая может возникать при копировании и вставке из PowerPoint.

Этот последний легче проверить, так что, возможно, начать там.

import re

def sanitize_str(s):
    control_chars = "\x00-\x1f\x7f-\x9f"
    control_char_re = re.compile("[%s]" % control_chars)
    return control_char_re.sub("", s)

document.add_paragraph(sanitize_str(a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...