Aktuelle Zeit: 14.08.2018 21:18

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit ReadString in UTF-16-Datei
BeitragVerfasst: 19.04.2018 02:22 
Offline

Registriert: 13.05.2017 01:44
Hallo,

angenommen, ich habe eine Unicode-Textdatei (UTF-16) folgenden Inhalts:
Zitat:
*
Text 1
*
Text 2
*
Text 3

und will die Anzahl der in dieser Datei vorkommenden '*' zählen, mit folgendem kleinen Programm:
Code:
Define Zk.s, Za
ReadFile(1, "D:\Texte\Asteriskus.txt", #PB_Unicode)
While Not Eof(1)
  Zk=ReadString(1)
  If Zk="*"
    Za+1
  EndIf
Wend
Debug Za
CloseFile(1)

(D:\Texte\Asteriskus.txt ist die Datei von oben). Nun sollte man meinen, daß Debug Za '3' ausspuckt, da ja drei Asterisken in der Datei oben enthalten sind. Das ist aber nicht der Fall, sondern es wird '2' ausgegeben.
Dieser Fehler tritt nicht auf, wenn man die Textdatei ins Format ANSI oder UTF-8 konvertiert und das Flag im ReadFile-Befehl in #PB_Ascii bzw. #PB_UTF8 ändert. Irgendwie scheint PureBasic Probleme mit UTF-16-Dateien zu haben. Oder hat jemand eine Erklärung, warum der erste Asteriskus dort übersprungen wird?

Vielen Dank

_________________
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit ReadString in UTF-16-Datei
BeitragVerfasst: 19.04.2018 06:28 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
Hast du es schon mal mit einem ReadStringFormat() probiert?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit ReadString in UTF-16-Datei
BeitragVerfasst: 19.04.2018 07:49 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Ist da vielleicht noch ein BOM am Anfang, sodass die erste Zeile ignoriert wird? Lass dir doch mal ausgeben, was ReadString eingelesen hat.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Creality 3D CR-10 Review und erste Druckergebnisse
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit ReadString in UTF-16-Datei
BeitragVerfasst: 19.04.2018 10:20 
Offline
Benutzeravatar

Registriert: 11.01.2009 16:30
Wohnort: Langerringen
UTF-16 hat im Gegensatz zu UTF-8 grundsätzlich immer ein BOM am Anfang der Datei stehen. D.h. Josh und NicTheQuick haben recht, das BOM wird zusammen in der Zeile eingelesen.

Ein einfaches ReadStringFormat(1) vor der Schleife sollte für Abhilfe sorgen.

_________________
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit ReadString in UTF-16-Datei
BeitragVerfasst: 20.04.2018 09:23 
Offline

Registriert: 13.05.2017 01:44
Hallo,

danke für den Hinweis mit ReadStringFormat, das löst das Problem. Trotzdem ist es merkwürdig, daß die erste Zuweisung zwar korrekt erfolgt (Za ist gleich "*"), die erste Identitätsprüfung aber False ergibt, d.h., es wird nicht in den If-Block verzweigt.

Was ist mit 'Am Anfang der Datei steht ein BOM' eigentlich konkret gemeint? Ist das ein bestimmter Zahlenwert, der am Anfang steht?

Vielen Dank

_________________
Windows 7 x64; geposteter Kode bezieht sich (sofern nicht anders angegeben) immer auf das aktuellste PureBasic 64-Bit

Erst wenn man es seiner Schwiegermutter erklären kann, hat man es verstanden.
As gsündeste is oiwei guad essn und dringa und ned grang wern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit ReadString in UTF-16-Datei
BeitragVerfasst: 20.04.2018 09:56 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Siehe Wiki - Byte Order Mark

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Creality 3D CR-10 Review und erste Druckergebnisse
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye