【问题标题】:Write UTF-8 textfile with Python that Windows Editor can read使用 Python 编写 Windows 编辑器可以读取的 UTF-8 文本文件
【发布时间】:2016-05-10 05:27:49
【问题描述】:

我在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 编辑器打开和编辑的文件的安全方法是什么?

【问题讨论】:

    标签: python windows unicode utf-8 editor


    【解决方案1】:

    使用 Python 3,您可以简单地使用

    with open(r'c:\configfile.txt', 'w', encoding='utf-8-sig') as cf:
        ...
    

    这将以“文本”模式打开文件。这将为您运行脚本的操作系统使用正确的行尾。

    io.open() 的工作方式相同。 codecs.open() 总是多用二进制,不会翻译行尾。

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

    【讨论】:

    • 我太傻了。它是旧的 Python 2.7 代码,我在 Python 3 中重用了它,只是忽略了我现在可以使用 open 而不是 codecs.open 的事实。感谢您指出这一点!
    • 在 Python 3 中,io.open is open.
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 2011-07-07
      • 2020-05-08
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多