【问题标题】:Writing Unicode to .docx file将 Unicode 写入 .docx 文件
【发布时间】:2018-01-28 19:28:14
【问题描述】:

有没有办法将 unicode 字符写入 docx 文件?我试过python-docx,但它给了我TypeError

追溯

Traceback(最近一次通话最后一次):

文件“”,第 1 行,在 runfile('H:/Python/Practice/new/download.py', wdir='H:/Python/Practice/new')

运行文件中的文件“C:\Program Files\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 866 行 execfile(文件名,命名空间)

文件“C:\Program Files\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 102 行,在 execfile exec(编译(f.read(),文件名,'exec'),命名空间)

文件“H:/Python/Practice/new/download.py”,第 37 行,在 document.add_paragraph(story.encode("utf-8"))

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\document.py”,第 63 行,在 add_paragraph return self._body.add_paragraph(text, style)

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\blkcntnr.py”,第 36 行,在 add_paragraph 段落.add_run(文本)

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\text\paragraph.py”,第 37 行,在 add_run run.text = 文本

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\text\run.py”,第 163 行,文本 self._r.text = 文本

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py”,第 104 行,文本 _RunContentAppender.append_to_run_from_text(self, text)

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py”,第 134 行,在 append_to_run_from_text appender.add_text(文本)

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py”,第 142 行,在 add_text self.add_char(char)

文件“C:\Program Files\Anaconda3\lib\site-packages\docx\oxml\text\run.py”,第 156 行,在 add_char '\r\n' 中的 elif 字符:

TypeError: 'in ' 需要 string 作为左操作数,而不是 int

我试图抓取一个网站并将文本写入 MS Word 文件。文本使用当地语言(孟加拉语)。当我在控制台上打印story 时,它会完美地打印整个文本。

代码

import requests
from docx import Document
from bs4 import BeautifulSoup

url = "some url"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")

story = soup.find("div", {"dir": "ltr"}).get_text().replace("<br />", "\n", len(response.text))

title = "title"
document = Document()
document.add_heading(title, 0)
document.add_paragraph(story.encode("utf-8"))
document.save(title + ".docx")

【问题讨论】:

  • 我添加了完整的回溯。顺便说一句,它完美地从URL 获取数据。当我在控制台上打印它时,它工作正常。
  • 你试过打电话给.encode('utf-8')吗?
  • 如果我不使用encode("utf-8"),它会给我一个包含一些块的文档。
  • 有没有可能是因为字体不支持这些字符?如果您选择这些块并粘贴到浏览器中,它们会显示为普通字符吗?
  • 哦,谢谢!将这些块粘贴到浏览器中可以正常工作,浏览器正常显示字符。 :D

标签: python unicode python-docx


【解决方案1】:

在 Python 3 中,strings(应该)自动支持 Unicode,因此您无需执行任何特殊操作,例如编码到 UTF-8。

document.add_paragraph(story)
#                      ^ just do this directly, no need to call `.encode('utf-8')`

虽然您可以将 Unicode 字符写入文档,但文字处理器使用的默认文本渲染引擎可能不支持它。您可能需要specify a font 以确保字符不会变成□□□□。

run = document.add_paragraph(story).add_run()
font = run.font
font.name = 'Vrinda'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2011-11-21
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多