【问题标题】:Compile Syntax Error: non ASCII letters in a string编译语法错误:字符串中的非 ASCII 字母
【发布时间】:2011-09-05 05:08:14
【问题描述】:

我有一个包含一长串 HTML 的 python 文件。当我编译和运行这个文件/脚本时,我得到这个错误:

_SyntaxError: Non-ASCII character '\x92' in file   C:\Users...\GlobalVars.py on line 2509,   but no encoding declared; see http://www.python.org/peps/pep-0263.html for details_

我已按照说明前往建议的网址。但是将这样的内容放在我的脚本顶部仍然不起作用:

#!/usr/bin/python
# -*- coding: latin-1 -*-

你认为我可以做些什么来阻止这个编译器错误的发生?

【问题讨论】:

  • 也许你应该使用 utf 编码(而不是拉丁文)...?

标签: python unicode compiler-errors ascii


【解决方案1】:

在代码顶部添加这些行

#! /usr/bin/env python
# -*- coding: utf-8 -*-

【讨论】:

    【解决方案2】:

    找到这个并希望它对下一个人有帮助: http://www.sitepoint.com/forums/showthread.php?567734-Anyone-know-what-this-error-means

    代码点 0x92(十进制 146)是右单引号,或 Windows-1252 中的撇号 (')。这是 ISO 8859 中的无效字符 在 UTF-8 中,因为 0x80-0x9F 范围是为 C1 控制保留的 字符。

    不确定我是否侵犯了版权。如果是这样,请删除块引用。

    【讨论】:

    • 当我从 python.org 复制一些文本作为代码中的注释时,我遇到了同样的错误。文本有一个撇号(不是 Windows 版本)导致了这种情况。我删除了撇号并使用了它的 Windows 版本。错误消失了。
    【解决方案3】:

    如果您只是担心摆脱此错误而不了解其详细信息(您可以从本页的其他答案中获得),您可以执行以下操作 -

    1) 复制您的代码并将其粘贴到 Notepad++ 中

    2) 选择编码 -> 以 UTF-8 编码

    3) 选择视图 -> 显示符号 -> 显示所有字符

    现在您可以看到导致问题的符号(x92 将可见)。替换/删除它以解决问题。

    【讨论】:

      【解决方案4】:

      首先,为了防止出现问题中指定的问题,您不应该永远对python源代码使用utf-8以外的其他编码。

      这是要使用的正确标题

      #! /usr/bin/env python
      # -*- coding: utf-8 -*-
      

      现在您必须将文件从您可能需要的任何编码转换为utf-8,可能您当前的文本编辑器能够做到这一点。

      如果您想知道我为什么这么说,请记住,文本编辑器不可能安全地猜出您的非 unicode 编码,因为没有非 unicode 的 BOM。出于这个原因,即使没有指定编码,大多数体面的编辑器也会默认使用 UTF-8。顺便说一句,python 文件头中指定的编码仅适用于 Python,大多数编辑器会忽略您在此处编写的内容。

      此外,正如您所见,Python 正在尝试使用 ASCII(而不是 latin-1)解码 128 以上的字符,这应该会失败。我不确定为什么会发生这种情况,但我什至不太在意,因为有更好的方法来解决问题。

      【讨论】:

        【解决方案5】:

        编码声明表明您认为该文件采用 latin-1 编码,但 python 解释器发现 GlobalVars.py 中第 2509 行或非常接近第 2509 行的字符不是您认为的那样。

        您应该首先确认 GlobalVars.py 的编码。真的是 latin-1 吗?

        接下来,您应该检查第 2509 行附近的字符。它们也是 latin-1,还是从网页或其他地方剪切和粘贴(可能其中混有 UTF-8 字符)?

        如果您的源文件中的字符不是您认为的那样,那么您可能需要先clean up the file,然后再继续操作。

        【讨论】:

          【解决方案6】:

          如果您的文件确实是 latin-1 格式,一个简单的解决方法是更改​​ html 字符串及其表示形式。

          阿法克:

          \x92 => 146 in decimal => Æ => Æ
          

          如果你的角色不是 Æ,那么你的文件没有编码成 latin-1 ;-)(你可能想检查一下 utf-8/cp1292 是否能更好地快速获胜)

          编辑: 当然,您想在尝试之前检查您的 ACTUAL 文件编码。我可能错了,不是 100% 确定 \x92 在 Iso8859-1 中是 Æ :根据这个page,它似乎没有定义。

          【讨论】:

            【解决方案7】:

            它必须位于包含非 ASCII 文本的脚本顶部,并且必须与文件的实际编码相匹配。 \x92 是 CP1252,而不是 Latin-1。

            【讨论】:

              猜你喜欢
              • 2015-01-06
              • 1970-01-01
              • 1970-01-01
              • 2014-01-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-05
              • 2014-12-06
              相关资源
              最近更新 更多