2011-05-31 12 views
8

Tengo un archivo python que contiene una larga cadena de HTML. Cuando compilo & ejecutar este archivo/script consigo este error:Error de sintaxis de compilación: letras no ASCII en una cadena

_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_ 

He seguido las instrucciones y se han ido a sugirió la url. Pero poner algo como esto en la parte superior de mi guión todavía no funciona:

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

¿Qué le parece que puedo hacer para detener este error del compilador de ocurriendo?

+0

tal vez debería utilizar codificación UTF-(en lugar del latín) ...? – phynfo

Respuesta

0

Una solución fácil de solucionar si su archivo está realmente en latin-1 es cambiar la cadena html con su representación.

Que yo sepa:

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

Si su carácter no es Æ, y su archivo no está codificado en Latin-1 ;-) (y es posible que desee comprobar si UTF-8/cp1292 funciona mejor como una rápida win)

EDIT: Por supuesto, usted quiere verificar la codificación de su archivo ACTUAL antes de intentarlo. Podría estar equivocado, no estoy 100% seguro de que \ x92 es Æ en Iso8859-1: según este page, no parece estar definido.

3

Debe estar en la parte superior del script que tenga el texto que no sea ASCII, y debe coincidir con la codificación real del archivo. \x92 es CP1252, no Latin-1.

1

La declaración de codificación indica que usted piensa que el archivo está en codificación latin-1, pero el intérprete de python encuentra que un char en o muy cerca de la línea 2509 en GlobalVars.py no es lo que usted cree que es.

Primero debe confirmar la codificación de GlobalVars.py. ¿Es realmente latin-1?

A continuación, debe verificar los caracteres cerca de la línea 2509. ¿Son también latin-1, o fueron cortados y pegados desde una página web o en otro lugar (tal vez hay caracteres UTF-8 mezclados)?

Si tiene caracteres en el archivo fuente que no son lo que cree que son, entonces puede necesitar clean up the file antes de seguir adelante.

8

En primer lugar, para evitar problemas como el especificado en la pregunta, no debe alguna vez utilizar otra codificación que utf-8 para el código fuente python.

Ésta es la cabecera correcta de utilizar

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

Ahora usted tiene que convertir el archivo de cualquier codificación puede que tenga que utf-8, probablemente su editor de texto actual es capaz de hacer eso.

Si se pregunta por qué digo esto, recuerde que es imposible que un editor de texto adivine con seguridad su codificación que no es Unicode porque no hay una lista de materiales para no unicode. Por esta razón, la mayoría de los editores decentes están utilizando UTF-8 como predeterminado, incluso cuando la codificación no está especificada. Y por cierto, la codificación especificada en el encabezado del archivo python es solo para Python, la mayoría de los editores ignoran lo que usted escribió allí.

Además, como puede ver, Python intenta decodificar un carácter por encima de 128 usando ASCII (no latin-1), se supone que esto falla. No estoy seguro de por qué sucede esto, pero ni siquiera me importa demasiado porque hay una forma mucho mejor de resolver el problema.

3

Si son sólo preocupado por la eliminación de este error, sin entrar en los detalles de la misma (que se puede obtener de las otras respuestas en esta página), puede hacer lo siguiente -

1) copia de su código y pegarlo en Notepad ++

2) Seleccionar codificación -> Codificar en UTF-8

3) Seleccione Ver -> Mostrar símbolo -> Mostrar todos los caracteres

Ahora bien, sería visible para usted que qué símbolo está causando el problema (x92 lo haría se visible). Reemplácelo/Quítelo para resolver el problema.

2

encontrado esto y espero que sea útil a la siguiente persona: http://www.sitepoint.com/forums/showthread.php?567734-Anyone-know-what-this-error-means

Code point 0x92 (146 decimal) is the right single quotation mark, or apostrophe (’) in Windows-1252. It's an invalid character in ISO 8859 and in UTF-8, since the 0x80-0x9F range is reserved for C1 control characters.

No estoy seguro si me revienta los derechos de autor. Si es así, elimine la blockquote.

+0

Obtuve el mismo error cuando copié un texto de python.org como un comentario en mi código. El texto tenía un apóstrofo (no una versión de Windows) que estaba causando esto. Eliminé el apóstrofo y usé la versión de Windows. El error desapareció – user3885927

1

añadir estas líneas en la parte superior de su código

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