데이터 교환에 일반적으로 사용되는 CSV 파일에는 무결성을 유지하기 위해 UTF8 인코딩이 필요한 악센트 문자가 포함되어 있는 경우가 많습니다. 그러나 Python csvreader는 ASCII 데이터만 지원합니다.
UTF8 인코딩을 처리하는 코드를 사용했음에도 불구하고 악센트가 있는 프랑스어 또는 스페인어 문자가 있는 UTF8 CSV 파일을 읽으려고 하면 다음 예외가 발생합니다. 발생했습니다:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 68: ordinal not in range(128)
해결책은 인코딩 방법의 목적을 이해하는 데 있습니다. 유니코드 문자열을 바이트 문자열로 변환하며 그 반대는 아닙니다. UTF8 텍스트 파일 처리를 위해 코덱 모듈, 특히 codecs.open을 올바르게 활용하면 코드가 단순화될 수 있습니다.
<code class="python">import csv def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs): csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs) for row in csv_reader: yield [unicode(cell, 'utf-8') for cell in row] filename = 'da.csv' reader = unicode_csv_reader(open(filename)) for field1, field2, field3 in reader: print field1, field2, field3 </code>
입력 데이터가 UTF8이 아닌 경우(예: ISO-8859-1, 코드에는 트랜스코딩이 필요합니다.
<code class="python">line.decode('whateverweirdcodec').encode('utf-8')</code>
그러나 csv는 ISO-8859-* 인코딩된 바이트 문자열을 직접 처리할 수 있으므로 이는 종종 불필요한 경우가 있습니다.
위 내용은 CSV 파일을 읽을 때 Python에서 UTF8 인코딩을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!