【问题标题】:Python 3 How to ignore errors when writing UTF-8 to filePython 3 如何在将 UTF-8 写入文件时忽略错误
【发布时间】:2017-05-30 09:23:39
【问题描述】:

我有以下程序:

with open(r'C:\s_f.csv', 'w', encoding="utf-8", errors="ignore") as outf:
    with open(r'C:\street.csv', 'r', encoding="utf-8", errors="ignore") as f:
        for line in f:
            out_line = line
            out_line = out_line.replace('"','¬')
            out_line = out_line.replace(',','~')
            outf.write(out_line)

由于某种原因,我仍然得到:

File "c:\Program Files\Anaconda3\streets.py", line 5
    SyntaxError: Non-UTF-8 code starting with '\xac' in file c:\Program Files\Anaconda3\streets.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 

如何忽略 Python 3 中的 UTF-8 错误?

【问题讨论】:

标签: python utf-8


【解决方案1】:

您已将源代码保存为 UTF-8 以外的其他格式,很可能是 Latin-1 或 Windows 代码页 1252。

您的选择是更改用于源的编码(使用您的文本编辑器),在源文件的第一行或第二行声明源代码编码(如错误消息所示),或使用 ASCII 安全转义序列。

后者可以在这里使用\xhh\uhhhh 转义序列来完成:

out_line = out_line.replace('"','\xAC')  # or `'\u00AC'`

\xac\x00ac(不区分大小写)编码 Unicode 标准中的相同字符 U+00AC NOT SIGN codepoint。如果正确编码为 UTF-8,这将使用 C2 AC 字节序列,但您的 .py 文件当时保存为 AC only

如果您知道使用的编码但不想更改它,请在文件开头添加PEP 263 comment(顶部的第一行或第二行):

# coding=cp1252

您的最佳选项是配置您的代码编辑器以将文件保存为 UTF-8。这是 Python 3 用于读取源代码的默认编码。

这与写入 CSV 文件无关,Python 甚至无法开始运行您的代码,因为它无法正确读取源代码。

【讨论】:

    【解决方案2】:

    也许你可以使用:

    # -*- coding: utf-8 -*-
    

    作为代码的第一行

    【讨论】:

    • OP 使用的是 Python 3,默认 是 UTF-8。问题是他们没有使用 UTF-8 来保存源代码。
    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2010-10-30
    • 2011-05-06
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    相关资源
    最近更新 更多