sogis / gretl-v1

Contains custom gradle tasks to use in gradle builds. The custom tasks extend gradle for use as a sql-centric (geo)data etl. gretl = gradle etl
MIT License
1 stars 2 forks source link

CsvImport: wegen BOM in UTF-8 wird erster Attributwert im CSV wird nicht gelesen #85

Open edigonzales opened 6 years ago

edigonzales commented 6 years ago

22:16:20.464 [ERROR] [ch.so.agi.gretl.tasks.CsvImport] failed to run CvsImport ch.interlis.iox.IoxException: org.postgresql.util.PSQLException: ERROR: null value in column "stop_id" violates not-null constraint Detail: Failing row contains (null, Weissenhorn Eschach, 48.3010036099201, 10.135089480891, null, null). at ch.interlis.ioxwkf.dbtools.AbstractImport2db.importData(AbstractImport2db.java:155)

Beispiel ist beigelegt. Selber gebuildetes gretl-1.0.4-SNAPSHOT.

attrValue ist null: https://github.com/claeis/iox-wkf/blob/master/src/main/java/ch/interlis/ioxwkf/dbtools/AbstractImport2db.java#L244

Archive.zip

edigonzales commented 6 years ago

ByteOrderMark-Problematik: Das erste Header-Attribut hat ein erstes unsichtbares Zeichen. Die Länge für stop_id ist 8 anstatt 7 und findet dann stop_id aus der DB-Tabelle nicht. Anscheinend "beliebtes" Problem (erstes Zeichen eines UTF-8-Files, das in Java geöffnet wird).

Wenn ich im CsvReader in der while-Schleife der Methode readValues die Character mit den int-Wert 65279 ignoriere, funktioniert es.

if (readChar == 65279) { continue; }

claeis commented 6 years ago

Ist die Datei wirklich in UTF-8 codiert (nicht eher UTF-16)? (Bei UTF-8 macht ein BOM m.E. keinen Sinn...)

edigonzales commented 6 years ago

https://opentransportdata.swiss/dataset/587ecf41-eb18-448a-8073-7076bc3cbfeb/resource/ae006c6f-a0b5-4a70-bb22-03973739c38c/download/gtfsfp20172017-07-18.zip

Unzippen auf macOS.

stefan@Panajachel:~/Downloads/gtfsfp20172017-07-18_1$ file stops.txt stops.txt: UTF-8 Unicode (with BOM) text, with CRLF line terminators

Ob das wirklich stimmt, was file liefert, weiss ich nicht so richtig. Jedenfalls passt das zum Gesamtbild.

claeis commented 6 years ago

BOM in UTF-8 (Bytefolge 0xFEFF) ist zulässig. Muss (wenn vorhanden) überlesen werden.

edigonzales commented 6 years ago

fixed in iox-ili

edigonzales commented 6 years ago

Funktioniert bei mir mit iox-ili-1.20.4 noch immer nicht mit angehängtem File.

Test-Code im Anhang liefert für iomObj.getattrvalue("stop_id") null zurück.

Uf8Bom.zip stops.txt.zip