2016-04-11 19 views
-1

olduğunu ben UTF-8 (hayır BOM) CSV dosyası olarak kodlanmış vardır:Çıktı CSV dosyası kodlaması yanlış UTF-8

: yine farklı kodlama kullanılarak

aaa;bbb;ccc 
fff;äää;ööö 

ardından pasajı dosyasını okur ve sonra kaydeder

import csv 

rows = [] 
with open('test_in.csv', 'r', newline='') as file: 
    csvReader = csv.reader(file, delimiter=';') 
    for row in csvReader: 
     rows.append(row) 

with open('test_out.csv', 'w', newline='', encoding='iso-8859-1') as file: 
    csvWriter = csv.writer(file, delimiter=';', quoting=csv.QUOTE_MINIMAL) 
    for row in rows: 
     csvWriter.writerow(row) 

Sorun: Kayıtlı dosya iso-8859-1 değil, utf-8 kodlu.

benim UTF-8 kodlu kaynak kod dosyasında listesini aşağıdaki ile okunan dosyanın yerini, düzgün çalışır:

rows = [ 
    ['aaa','bbb','ccc'], 
    ['fff','äää','ööö'] 
] 

bu Python bir hata mı? Ya da ek kodlama seçenekleri kullanmalı mıyım?

Python 3.4 ile test edilmiştir.

cevap

0

(I UTF-8'e bunu varsayılan varsayılır). open için Dokümanlar ki:

kodlama deşifre veya dosyayı kodlamak için kullanılan kodlama adıdır. Bu sadece metin modunda kullanılmalıdır. Varsayılan kodlama platforma bağlıdır (locale.getpreferredencoding() döndürürse), ancak Python tarafından desteklenen herhangi bir metin kodlaması kullanılabilir. ...

Ve sistemimde CP1252 varsayılan olarak görünüyor.

with open('test_in.csv', 'r', newline='', encoding='utf-8') as file: 
: Böylece repr(rows) döner

[['aaa', 'bbb', 'ccc'], ['fff', 'äää', 'ööö']] 

Fix açıkça Giriş dosyası için de kodlamayı belirtmektir

1

Ben python3.5.1 ile çalıştı ve bu benim için iyi çalıştı: Düşündüğümden olarak open() için seçeneği çalışmıyor encoding görünüyor

[email protected]:~$ rm test_out.csv 
[email protected]:~$ ls test_in.csv 
test_in.csv 
[email protected]:~$ cat my.py 
import csv 

rows = [] 
#with open('my.csv', 'r', newline='', encoding='utf-8') as file: 
with open('test_in.csv', 'r', newline='') as file: 
    csvReader = csv.reader(file, delimiter=';') 
    for row in csvReader: 
     rows.append(row) 

with open('test_out.csv', 'w', newline='', encoding='iso-8859-1') as file: 
    csvWriter = csv.writer(file, delimiter=';', quoting=csv.QUOTE_MINIMAL) 
    for row in rows: 
     csvWriter.writerow(row) 
[email protected]:~$ 
[email protected]:~$ python3.5 my.py 
[email protected]:~$ ls test_out.csv 
test_out.csv 
[email protected]:~$ file test_*.csv 
test_in.csv: UTF-8 Unicode text 
test_out.csv: ISO-8859 text, with CRLF line terminators 
[email protected]:~$