Невозможно преобразовать все элементы файла CSV в объекты Python - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь преобразовать все элементы CSV в объекты Python, используя следующий сценарий Python, но не все символы в файле CSV находятся в UTF-8, и мне нужно преобразовать все эти символы в читаемый формат, то есть UTF-8.Как я могу добиться этого?

Я пытался преобразовать CSV-файл в UTF-8 с помощью простого текстового редактора, как это Как преобразовать CSV-файлы в UTF-8 , но не могу помочь.

Я использую следующий файл python:

import csv 

filename = "file.csv"

rows = [] 

with open(filename, 'r') as csvfile: 
    csvreader = csv.reader(csvfile) 

    for row in csvreader: 
        rows.append(row) 

    print("Total no. of rows: %d"%(csvreader.line_num)) 

print('\nFirst 5 rows are:\n') 
for row in rows[:5]: 
    for col in row: 
        print("%10s"%col), 
    print('\n') 

Python выдает следующие ошибки:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa4 in position 4942: invalid start byte

1 Ответ

0 голосов
/ 31 января 2019

UTF-8 теперь является стандартом де-факто, потому что if может представлять любой символ Юникода, но многие системы (в основном Windows) по-прежнему используют другие кодировки по соображениям совместимости.Например, для западноевропейских языков Windows использует cp1252, который является вариантом Latin1.

Latin1 - интересная кодировка, потому что любой байт допустим в Latin1 и представляет символ Юникода той же кодовой точки.Из-за этого, это кодировка , используемая, когда вы хотите иметь пуленепробиваемое декодирование и не уверены в фактической кодировке.Просто, если кодировка отличается, вы будете читать странные символов.Например, эта строка в кодировке utf-8 "fête" (по-французски "fest") будет читать 'fête' как строку байтов в кодировке Latin1.

Так что это не прервется (но может дать неправильные символы):

...
with open(filename, 'r', encoding='Latin1') as csvfile: 
    csvreader = csv.reader(csvfile)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...