Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 14.11.11 04:00
Hey,
ich bin grad relativ heufig mit Lazarus unterwegs (wie vlt einige schon bemerkt haben) und mir ist wieder etwas aufgefallen, das ich mir nicht erklären kann. Und zwar benutzt Lazarus ja standardmäßig UTF8-Strings (wurde mir mal gesagt). Heißt wenn ich einen str: String mach is der UTF8. Also sollte doch auch SizeOf(Char) = 2 Byte sein, richtig? Ist es aber nicht. Zum test hab ich das ganze nochma über einen FileStream auf die Platte raus geschoben und da kommt der String aber so an, wie ich ihn vorher im Programm definiert habe:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.FormCreate(Sender: TObject); var str: String; Stream: TFileStream; begin Stream := TFileStream.Create(Application.ExeName+'test.txt', fmCreate); try str := 'test νξοπρ'; Edit1.Text := str + ' ' + IntToStr(SizeOf(char)); Stream.Write(str[1], SizeOf(char)*Length(str)); finally Stream.Free; end; end; |
Text im Edit: "test νξοπρ 1" (ohne ")
Text in Datei: "test νξοπρ" (ohne ")
Kann mir das jmd erkären?!
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.11.11 08:22
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 14.11.11 08:48
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 14.11.11 19:20
Hey,
@jaenicke: ja hast recht. Länge is 15 und das 7. Zeichen wird nicht angezeigt.
@Luckie: Das hatte ich mir bei Wikipedia schon durchgelesen und auch verstanden. Das einzige was ich mir nicht erklären kann ist, warum SizeOf(str[7]) = 1 ist. weil das müssten ja mindesten 2 Byte sein, oder?
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.11.11 19:32
Bergmann89 hat folgendes geschrieben : | Das einzige was ich mir nicht erklären kann ist, warum SizeOf(str[7]) = 1 ist. weil das müssten ja mindesten 2 Byte sein, oder? |
Nein, denn str[7] ist der zweite Teil von ν, deinem sechsten Zeichen, str[8] + str[9] ergeben das ξ usw.
Das ist in Lazarus nicht so einfach wie mit Unicode in Delphi. 
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 14.11.11 19:41
Ah OK. Also muss ich die Zeichen ggf selber auswerden, wenn ich die ma brauch...
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.11.11 20:41
Gibt es in Lazarus vielleicht auch den Typ WideString? Sonst doch vermutlich zumindest PWideChar. Aber wie das dann auf anderen Plattformen als Windows aussieht, weiß ich nicht.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 14.11.11 23:10
Hey,
WideString, WideChar, PWideString und PWideChar sin alle vorhanden^^ Aber was solln mir die nützen? Der normale String ist doch schon WideString, oder?
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 15.11.11 00:06
Nein, WideString wird unter Windows über COM vom System verwaltet. Und via WideChar bzw. PWideChar solltest du auch direkte Unicodezeichen haben, auch unter Lazarus. Oder was ist dort SizeOf(PWideChar^) sonst? Sicher doch 2, oder?
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 15.11.11 10:34
Jap, WideChar is 2 Byte lang. Alles klar, da weiß ich erstma bescheid, danke für die kleine Nachhilfestunde^^
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|