2016-02-20 5 views
0

Я знаю, что есть несколько вопросов по этой теме, но я не мог получить ответ, который я ищу. Поэтому я все равно спрошу. Я новичок :)Python 3 UnicodeDecodeError: кодек ascii не может декодировать байт 0xc2

У меня есть эта простая функция:

f =[] 
def extract_row(): 
    with open('country_codes.txt') as infile: 
     for line in infile: 
      x = (line.split()[0]) 
      f.append(x) 
     print (f) 
extract_row() 

Он работает на Python 2.7, так что я мог бы получить информацию мне нужно.

['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AN', 'AO', 'AQ', 'AR'... 

Но когда я пытаюсь запустить его на Python 3.4 Я получаю эту ошибку:

Traceback (most recent call last): 
    File "/Users/juanlozano/Documents/geonames/extractRow.py", line 8, in <module> 
    extract_row() 
    File "/Users/juanlozano/Documents/geonames/extractRow.py", line 4, in extract_row 
    for line in infile: 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/encodings/ascii.py", line 26, in decode 
    return codecs.ascii_decode(input, self.errors)[0] 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position  31: ordinal not in range(128). 

Кто-нибудь может дать какую-то информацию об этом?

Вот некоторые строки из текстового файла, я использую: enter image description here

+1

Пожалуйста [править] Ваш вопрос и опубликовать содержимое 'country_codes.txt', по крайней мере, первые 30 строк или около того. – MattDMo

+0

Запускаете ли вы это из сеанса терминала на OS X? Если это так, проверьте настройки Terminal-> Preferences-> Encodings. – cdarke

+0

Я положил изображение файла. Thanx для вашей помощи MattDMo. – Juanloz

ответ

0

Я OCR'ed изображение в Google Drive. Не идеально, но достаточно хорошо, чтобы повторить:

AD AND 20 AN Andorra Andorra la Vella 468. 0 84 EU 
AE ARE 784 AE United Arab Emirates Abu Dhabi 82,880.0 4,975, 593 AS 
AF AFG 4 AF Afghanistan Kabul 647, 500.0 29, 121,286 AS 
AG ATG 28 AC Antigua and Barbuda St. John's 443.0 86,754 NA 
AI AIA 660 AV Anguilla The Valley 102.0 13, 254 NA 
ALE 8 AL Albania Tirana 28,748,0 2,986, 952 EU 
ARM 51 AM Armenia Yerevan 29,800.0 2,968,000 AS 
ANT 530 NT Willemstad 960. 0 136, 197 NA 24 A0 Angola Luanda 1,246,700.0 13,068,161 AF 
AQ 10 AY Antarctica 14,000,000.0 0 AN 
AR B2 AR Argentina Buenos Aires 2,766, 890. 0 41,343, 201 SA 
AS 16 AQ American Samoa Pago Pago 199.0 57,881 0C 
AT 40 AU Austria Vienna 83,858.0 8,205,000 EU 
AU AUS 36 AS Australia Canberra 7,686,850.0 21,515,754 OC 
AW AA Aruba Oranjestad 193.0 71,566 NA 
AX Åland Mariehamn 1,580.0 26,711 EU 
AZ AJ Azerbaijan Baku 86,600.0 8,303,512 AS 
BA BK Bosnia and Herzegovina Sarajevo 51, 129.0 4,590,000 EU 
BB BB Barbados Bridgetown 431. 0 285,653 NA 
BD BG Bangladesh Dhaka 144,000.0 156,118,464 AS 
BE BE Belgium Brussels 30,510.0 10,403,000 EU 
BF UV Burkina Faso Ouagadougou 274,200.0 16, 241, 811 AF 
BG BU Bulgaria Sofia 110,910.0 7, 148,785 EU 
BH BA Bahrain Manama | 665.0 738,004 AS 
BI BY Burundi Bujumbura 27,830.0 9,863, 117 AF 
BJ EN Benin Porto-Novo 112,620.0 9,056,010 AF 
BL TB Saint Barthélemy Gustavia 21. 0 8, 45 NA 
EM BD Bermuda Hamilton 53.0 65,365 NA 
BN BX Brunei Bandar Seri Begawan 5,770.0 395,027 AS 
B0 BL Bolivia Sucre 1,098,580,0 9,947, 418 SA 
BQ Bonaire_328.0 18,012 NA 

Затем я вошел код с добавлением encoding='ascii', как показано ниже:

f =[] 
def extract_row(): 
    with open('country_codes.txt',encoding='ascii') as infile: 
     for line in infile: 
      x = (line.split()[0]) 
      f.append(x) 
     print (f) 

extract_row() 

И получил ошибку UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 763: ordinal not in range(128).

Я поэтому считаю, что Python почему-то думает, что ваш исходный файл закодирован ascii. Сначала проверьте это, выполнив sys.getdefaultencoding(). Знаете ли вы правильную кодировку исходного файла? Попробуйте изменить кодировку в строке открытого файла (например, до encoding=utf-8 или iso8859, как предложено выше) и посмотрите, поможет ли это.

+0

Интересно, собирается ли python 3 'site.py' из установки python 2? Дополнительный фон: http://stackoverflow.com/questions/2276200/changing-default-encoding-of-python – cdarke

0

использовать codecs lib решить этот вопрос. заменить сегмент кода файла чтения с этим:

with codecs.open('country_codes.txt','r','utf-8') as infile:

+1

Поскольку в вопросе говорится о python 3.4, в этом случае библиотека кодеков не нужна, так как вызов 'open' имеет' encoding' [опция] (https://docs.python.org/3.4/library/functions.html#open) – Featherlegs

Смежные вопросы