我正在尝试用rtf文件写入大量法语信息,包含重音字符。首先,我尝试使用编解码器写入文件:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
output = codecs.open("test.rtf", "w", 'utf-8')
name = unicode("Lumière", 'utf-8')
# This is just the rtf header
# The whole point of using rtf is so that I can embed links
output.write("{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{" +
"\\fonttbl{\\f0\\fnil\\fcharset0 Calibri;}}\\n{\\colortbl ;" +
"\\red0\\green0\\blue255;}\n{\\*\\generator Msftedit 5.41.21.2509;}" +
"\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang9\\f0\\fs22\n\n")
output.write(name)
output.write("}")
output.close()
这会输出一个* .rtf文件,该文件显示为:
Lumière
textEdit和MS word中都有。在纯文本编辑器中将其作为文本文档打开,我们得到:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}\n{\colortbl ;\red0\green0\blue255;}
{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs22
Lumière}
标题的gobbledeegook和正确格式化的单词。如果我直接编辑rtf文档,要添加è字符,源将更改为:
Lumi\'e8re
非常类似于:
>>> name = unicode("Lumière", 'utf-8')
>>> name
u'Lumi\xe8re'
这显然是我需要写入文件,但是将'x'换成撇号。如果我尝试编写没有编码(不要使用编解码器来打开文件),我会得到着名的
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 4: ordinal not in range(128)
错误。如何让file.write()停止尝试编码,我想字面写'\ xe8'而不是字符'\ xe8'表示文件(除了我想交换'x'表示撇号)。