2011-05-31 9 views
8

Mam plik pythonu, który zawiera długi ciąg kodu HTML. Kiedy skompilować & uruchomić ten plik/skrypt otrzymuję ten błąd:Błąd składni kompilacji: brak liter ASCII w ciągu znaków

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

Śledzę z instrukcjami i poszedł do url sugerowane. Ale wprowadzenie czegoś takiego u góry mojego skryptu nadal nie działa:

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

Co sądzisz mogę zrobić, aby zatrzymać ten błąd kompilatora z występujących?

+0

może trzeba zastosować kodowanie UTF-(zamiast łacińskiej) ...? – phynfo

Odpowiedz

0

Łatwe rozwiązanie problemu, jeśli twój plik jest naprawdę w łacinie-1, to zmienić ciąg html z jego reprezentacją.

AFAIK:

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

Jeśli twoja postać nie jest Ć, a następnie plik nie jest zakodowane w Latin-1 ;-) (a może chcesz sprawdzić, czy UTF-8/cp1292 działa lepiej jako szybkie wygrana)

EDYTOWANIE: Oczywiście, przed próbą należy sprawdzić kodowanie pliku. Mogę się mylić, nie jestem w 100% pewien \ x92 jest Æ w Iso8859-1: według tego page, nie wydaje się to zdefiniowane.

3

Musi znajdować się u góry skryptu z tekstem innym niż ASCII i musi pasować do rzeczywistego kodowania pliku. \x92 to CP1252, a nie Latin-1.

1

Dekodowanie kodu wskazuje, że uważasz, że plik jest w kodowaniu Latin-1, ale interpreter Pythona stwierdza, że ​​znak na linii lub bardzo blisko linii 2509 w pliku GlobalVars.py nie jest tym, co Twoim zdaniem jest.

Powinieneś najpierw potwierdzić kodowanie pliku GlobalVars.py. Czy to naprawdę latin-1?

Następnie należy sprawdzić znaki w pobliżu linii 2509. Czy są one również łacińskie-1, czy zostały wycięte i wklejone ze strony internetowej lub gdzieś indziej (może tam są pomieszane znaki UTF-8)?

Jeśli masz w pliku źródłowym znaki, które nie są tym, za kogo się uważasz, być może będziesz musiał (a) przed clean up the file przejść dalej.

8

Po pierwsze, aby zapobiec problemom podobnym do podanego w pytaniu, nie należy używać kiedykolwiek dla kodu źródłowego Pythona, użyj innego kodowania niż utf-8.

To jest nagłówek poprawne użycie

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

Teraz trzeba przekonwertować plik z kodowaniem cokolwiek może trzeba utf-8, prawdopodobnie aktualna edytor tekstu jest w stanie to zrobić.

Jeśli zastanawiasz się, dlaczego tak mówię, pamiętaj, że edytor tekstu nie może bezpiecznie odgadnąć kodowania bez kodowania Unicode, ponieważ nie ma BOM dla kodu innego niż Unicode. Z tego powodu większość przyzwoitych edytorów używa standardu UTF-8 jako domyślnego nawet wtedy, gdy nie jest określone kodowanie. I BTW, kodowanie określone w nagłówku pliku Pythona jest tylko dla Pythona, większość edytorów ignoruje to, co tam napisałeś.

Ponadto, jak widać, Python próbuje zdekodować znak powyżej 128 przy użyciu ASCII (nie latin-1), to się nie uda. Nie jestem pewien, dlaczego tak się dzieje, ale nie przejmuję się zbytnio, ponieważ istnieje o wiele lepszy sposób rozwiązania problemu.

3

Jeśli tylko chodzi o pozbycie się tego błędu nie wchodząc w szczegóły o nim (które można uzyskać z innych odpowiedzi na tej stronie), można wykonać następujące czynności -

1) kopiować kod i wklej go w Notepad ++

2) Wybierz Kodowanie -> Kodowanie UTF-8

3) Wybierz Widok -> Pokaż Symbol -> Pokaż wszystkie znaki

teraz byłoby to dla Ciebie widoczne który symbol powoduje problem (x92 to bądź widoczny). Wymień/Usuń, aby rozwiązać problem.

2

Znaleziony to i mam nadzieję, że to przydatne do następnej osoby: 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.

Nie wiem, czy mam krach praw autorskich. Jeśli tak, usuń cytat blokowy.

+0

Ten sam błąd wystąpił, gdy skopiowałem tekst z python.org jako komentarz w moim kodzie. Tekst miał apostrof (a nie wersję Windows), która to powodowała. Usunąłem apostrof i użyłem jego wersji Windows. Błąd zniknął. – user3885927

1

dodać te linie na górnej części kodu

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