用Python编写Windows编辑器可以读取的UTF-8文本文件

用Python编写Windows编辑器可以读取的UTF-8文本文件,python,windows,unicode,utf-8,editor,Python,Windows,Unicode,Utf 8,Editor,我在Win 7上使用Python 3.4,但存在以下问题: 我想将多行unicode文本写入文本文件,用户可以使用标准Windows编辑器(我知道…)打开该文本文件,而无需任何特殊说明。我已经发现这个编辑器显然需要一个BOM表来理解编码实际上是UTF-8: with codecs.open(r'c:\configfile.txt', 'w', encoding='utf-8-sig') as cf: cf.write("""Test1 Test2 öäüß Test3""")

我在Win 7上使用Python 3.4,但存在以下问题:

我想将多行unicode文本写入文本文件,用户可以使用标准Windows编辑器(我知道…)打开该文本文件,而无需任何特殊说明。我已经发现这个编辑器显然需要一个BOM表来理解编码实际上是UTF-8:

with codecs.open(r'c:\configfile.txt', 'w', encoding='utf-8-sig') as cf:
        cf.write("""Test1
Test2 öäüß
Test3""")
现在我注意到,在这段代码中,所有换行符都写为0x0a,而不是0x0d 0x0a,Windows编辑器无法识别它,因此它在一行中显示所有内容


长话短说:将多行unicode文本字符串写入可使用Windows编辑器打开和编辑的文件的安全方法是什么?

我自己也找到了一个解决方案。。。只需使用io.open而不是codecs.open并使用相同的参数即可修复换行符问题:

with io.open(r'c:\configfile.txt', 'w', encoding='utf-8-sig') as cf:
        cf.write("""Test1
Test2 öäüß
Test3""")

使用Python3,您可以简单地使用

with open(r'c:\configfile.txt', 'w', encoding='utf-8-sig') as cf:
    ...
将以“文本”模式打开文件。这将为运行脚本的操作系统使用正确的行尾

io.open()
codecdes.open()
始终使用二进制代码,不会转换行尾


在Python 2中,您可以通过使用
wt
作为模式来实现相同的效果。

我真蠢。这是旧的Python2.7代码,我在Python3中重用了它,但忽略了我现在可以使用open而不是codecdes.open这一事实。谢谢你指出这一点!在Python3中,
io.open是打开的