使用 Python 编写 UTF-8 文本文件,Windows 编辑器可以读取
Write UTF-8 textfile with Python that Windows Editor can read
我在 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""")
使用Python 3,你可以简单地使用
with open(r'c:\configfile.txt', 'w', encoding='utf-8-sig') as cf:
...
这将以 "text" 模式打开文件。这将为您 运行 脚本所在的 OS 使用正确的行结尾。
io.open()
的工作方式相同。 codecs.open()
总是多用二进制,不会发生行尾的翻译。
在Python2中,使用wt
模式也可以达到同样的效果。
我在 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""")
使用Python 3,你可以简单地使用
with open(r'c:\configfile.txt', 'w', encoding='utf-8-sig') as cf:
...
这将以 "text" 模式打开文件。这将为您 运行 脚本所在的 OS 使用正确的行结尾。
io.open()
的工作方式相同。 codecs.open()
总是多用二进制,不会发生行尾的翻译。
在Python2中,使用wt
模式也可以达到同样的效果。