Hallo,
ich schreibe gerade ein PHP-Skript was eine knapp 40MB grosse CSV Datei auslesen soll. Meine Frage dazu hat allerdings weniger mit PHP zu tun. Vermutlich hätte ich das selbe Problem mit C, C++ oder einem Shell-Skript.
Problem ist für mich im Moment, dass die ersten Zeichen in der Textdatei offensichtlich keine gültigen Zeichen für normalen Text sind. Ich habe sogar extra nochmal mit gEdit die erste Zeile gelöscht, nochmal neu rein getippt und die Datei erneut abgespeichert. Eigentlich sollte das erste Zeichen in der Datei ein einfaches Anführungszeichen sein, das zweite ein p, das dritte ein N, aber wenn ich für diese Zeichen den ASCII-Code ausgeben lasse kommt das hier bei raus: 239, 187, 191, erst dann kommen die Zeichen, die ich im Texteditor als erste Zeichen sehen kann. Wie ist das möglich, wo kommen diese drei zusätzlichen Zeichen bzw. Werte her?
Erwähnt sei noch, dass die CSV Datei im uft-8 Format vorliegt.
40MB-Datei Zeichen für Zeichen auslesen
- matman
- Beiträge: 744
- Registriert: 03.07.2008 10:50:07
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Hamburg
-
Kontaktdaten:
40MB-Datei Zeichen für Zeichen auslesen
System: Bullseye
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525
Re: 40MB-Datei Zeichen für Zeichen auslesen
UTF-8 ist das Stichwort: dein Editor scheint hier den BOM (Byte Order Mark) für UTF-8 an den Anfang der Datei zu schreiben: http://de.wikipedia.org/wiki/Byte_Order_Mark
Sollte aber kein Problem sein, die 3 Zeichen wegzuschneiden. Oder halt dem Editor abgewöhnen, dass er das macht.
Sollte aber kein Problem sein, die 3 Zeichen wegzuschneiden. Oder halt dem Editor abgewöhnen, dass er das macht.
- matman
- Beiträge: 744
- Registriert: 03.07.2008 10:50:07
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Hamburg
-
Kontaktdaten:
Re: 40MB-Datei Zeichen für Zeichen auslesen
Hey cool, dann weiss ich ja jetzt, woran man eine utf-8 kodierte Datei erkennen kann.
Was allerdings lustig ist: ich war selbst der schusselige Verursacher des Problemes. Es gab nämlich eine Kopie der betreffenden Datei über die ich das Skript laufen lassen wollte und die BOM entfernte ich im Original.
Nunja, da ich die Kopie vergessen hatte dachte ich schon, Linux macht da irgendwas mit grösseren Dateien, wovon ich noch nichts weiss. Aber o.k.; jetzt ist es ja geklärt.
gEdit setzt die BOM allerdings nicht automatisch. Die CSV Datei stammt auch nicht von mir. Und darauf verlassen, dass ein utf-8 kodiertes File auch ein BOM hat kann man sich vermutlich auch nicht?
Was allerdings lustig ist: ich war selbst der schusselige Verursacher des Problemes. Es gab nämlich eine Kopie der betreffenden Datei über die ich das Skript laufen lassen wollte und die BOM entfernte ich im Original.
Nunja, da ich die Kopie vergessen hatte dachte ich schon, Linux macht da irgendwas mit grösseren Dateien, wovon ich noch nichts weiss. Aber o.k.; jetzt ist es ja geklärt.
gEdit setzt die BOM allerdings nicht automatisch. Die CSV Datei stammt auch nicht von mir. Und darauf verlassen, dass ein utf-8 kodiertes File auch ein BOM hat kann man sich vermutlich auch nicht?
System: Bullseye
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525
Re: 40MB-Datei Zeichen für Zeichen auslesen
Nein, soweit ich das verstanden habe, ist die optional.
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: 40MB-Datei Zeichen für Zeichen auslesen
Auf keinen Fall, Skripte dürfen zum Beispiel kein BOM haben, da dort die ersten Zeichen "#!" sein müssen (siehe der Wikipedia Artikel).Und darauf verlassen, dass ein utf-8 kodiertes File auch ein BOM hat kann man sich vermutlich auch nicht?
- matman
- Beiträge: 744
- Registriert: 03.07.2008 10:50:07
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Hamburg
-
Kontaktdaten:
Re: 40MB-Datei Zeichen für Zeichen auslesen
Den Artikel habe ich ja gelesen. Anders würde die Sache allerdings aussehen, wenn jedes Programm das eine Datei öffnet nach einer BOM ausschau hält und diese gegebenenfalls überspringt. Sinnvoll wäre es ja schon, wenn man bei Textdateien die Kodierung mit speichert. So könnte vermieden werden, dass Textdateien mit der falschen Kodierung angezeigt oder verarbeitet werden. Aber naja..... daran hat wohl bei der Einführung von utf-8 keiner gedacht.Spasswolf hat geschrieben:Skripte dürfen zum Beispiel kein BOM haben, da dort die ersten Zeichen "#!" sein müssen
System: Bullseye
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525
Hardware: Gigabyte 970A-DS3P mit AMD FX-6300, Kingston HyperX DDR3-1333 (4x4GB), Samsung SSD 860 EVO, HGST Travelstar 7K1000, Samsung DVD-ROM SH-D162D, Geforce GTX 1050, SoundBlaster Live! Platinum, Hauppauge WinTV-HVR-5525