/ / Ktoré kódovanie používa csv.DictReader pri čítaní csv? - python, python-2.7, csv, kódovanie, utf-8

Ktoré kódovanie používa csv.DictReader pri čítaní csv? - python, python-2.7, csv, kódovanie, utf-8

Mám uložený súbor CSV kódovaný ako utf-8.

Obsahuje znaky bez ascii [umlauts].

Čítam súbor pomocou:

csv.DictReader(<file>,delimiter=<delimiter>).

Moje otázky sú:

  1. V ktorom kódovaní sa číta súbor?
  2. Všimol som si, že aby som mohol označiť reťazce ako utf-8, musím vykonať:

    str.decode("utf-8")
    

    Existuje lepší prístup, ako prečítať súbor v jednom kódovaní a potom previesť do iného, ​​t.j. utf-8?

[Python verzia: 2.7]

odpovede:

2 pre odpoveď č. 1

V Pythone 2.7 modul CSV neuplatňuje žiadne dekódovanie - otvorí súbor v binárnom režime a vráti reťazce bajtov.

použitie https://github.com/jdunck/python-unicodecsv, ktorý za chodu dekóduje.

Používať ako:

with open("myfile.csv", "rb") as my_file:
r = unicodecsv.DictReader(my_file, encoding="utf-8")

r bude obsahovať diktát Unicodes. Je dôležité, aby sa zdrojový súbor otvoril ako binary mode.


1 pre odpoveď č. 2

Ako je to s použitím inštancií a tried na dosiahnutie tohto cieľa?

Zdieľaný slovník môžete uložiť na úrovni triedy a tiež ho prinútiť načítať textové súbory Unicode a dokonca zistiť ich kódovanie s použitím alebo bez použitia masiek súborov BOM.

Už dávno som napísal jednoduchú knižnicu, ktorá prepíše predvolenú hodnotu open() s jedným, ktorý pozná Unicode.

Ak urobíš import tendo.unicode budete môcť zmeniť spôsob, akým knižnica csv načítava súbory.

Ak vaše súbory neobsahujú hlavičku rozpisky, knižnica bude namiesto starej predpokladať utf-8 ascii, Ak chcete, môžete dokonca zadať ďalšie núdzové kódovanie.