首页 > 解决方案 > 尝试保存文件时出现 unicode 错误

问题描述

我正在尝试在Ubuntu中保存python-docx文档,但出现此错误:. 我试图应用这个解决方案,但我得到了另一个错误:。'ascii' codec can't encode character '\xed' in position 65: ordinal not in range(128)AttributeError: 'bytes' object has no attribute 'write'

这是引发第一个错误的代码:

current_directory = settings.MEDIA_DIR
file_name = "Rooming {} {}-{}.docx".format(hotel, start_date, end_date)
document.save(current_directory + file_name)

这是引发最新错误的代码:

current_directory = settings.MEDIA_DIR
file_name = "Rooming {} {}-{}.docx".format(hotel, start_date, end_date)
document.save((current_directory + file_name).encode('utf-8'))

我知道文件名将以非标准 ascii 字符结尾,但我希望能够使用所有这些字符保存文件。

标签: pythonpython-docx

解决方案


之所以出现问题,是因为在西班牙语中我们使用了一些非标准的字符修饰符 (áéíóúüñ),而我试图用一些包含此类字符的数据来形成文件名。我想必须有一种方法来配置服务器所以这不会是一个问题,但我采取了短路径并将特殊字符更改为它们的标准基本字符:

current_directory = settings.MEDIA_DIR
file_name = "Rooming {} {}-{}.docx".format(unicodedata.normalize('NFKD', hotel).encode('ascii', 'ignore').decode('ascii'), start_date, end_date)
document.save(current_directory + file_name)

此方法替换如下字符:áéíóúüñÁÉÍÓÚÜÑ -> aeiouunAEIOUUN.

错误消失了。


推荐阅读