python - 尝试保存文件时出现 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 字符结尾,但我希望能够使用所有这些字符保存文件。
解决方案
之所以出现问题,是因为在西班牙语中我们使用了一些非标准的字符修饰符 (áéíóúüñ),而我试图用一些包含此类字符的数据来形成文件名。我想必须有一种方法来配置服务器所以这不会是一个问题,但我采取了短路径并将特殊字符更改为它们的标准基本字符:
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
.
错误消失了。
推荐阅读
- python - Python:扫描文件中的子字符串,保存位置,然后返回它
- java - 使用 Spring Framework 注入 Cucumber 场景
- c - 使用 Simulink 连接 4 线电阻式触摸屏
- python - ping ip 时 subprocess.check_output() 无法返回命令结果
- javascript - PLUPLOAD:file.status 属性未定义,file.status 也是常量
- javascript - 在 Element UI 的 Tabs 组件右侧添加一个按钮
- android - 您的应用程序或应用程序包中至少有一个包含 actions.xml 文件
- javascript - 使用 HTML、CSS 和 JS 制作带有标志的下拉菜单
- python - 使用 Python C 扩展模块,显示带有“外部”前缀而不是“内部”前缀的类型,而不会破坏酸洗
- php - 检索到的 JSON 数据未解码为 xcode 12 中的自定义结构