Hallo Chris
I tryed this already, no effect.
1. Reading the HTML File shared
FileStream := System.IO.FileStream{cFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite}
cBuffer := System.IO.StreamReader{ FileStream}:ReadToEnd()
FileStream:Close ()
2. Some work with the String cBuffer
3. Writing to the Output - and here i have to wrong charset in the output.
bBuffer := System.Text.Encoding.UTF8:GetBytes( cString )
oResponse:ContentLength64 := bBuffer:Length
oOutput := oResponse:OutputStream
oOutput:Write (bBuffer, 0, bBuffer:Length)
In my VO CGI App it was like that - FWrite3(cgi_hStdOut, PTR(_CAST, cString), SLen(cString) )
Horst
Gemischtes / mishmash
Moderator: wriedmann
Gemischtes / mishmash
Hallo Horst,
VO kennt kein Unicode, daher hast Du diese Probleme hier nicht (dafür Einschränkungen bei Zeichensätzen).
Wenn Deine Datei Ansi ist und nicht Unicode, dann solltest Du ein paar Dinge probieren:
auf KEINEN Fall UTF8, denn damit geht Dein Programm davon aus, dass der gelesene String Unicode ist, und das ist er nicht.
Wolfgang
VO kennt kein Unicode, daher hast Du diese Probleme hier nicht (dafür Einschränkungen bei Zeichensätzen).
Wenn Deine Datei Ansi ist und nicht Unicode, dann solltest Du ein paar Dinge probieren:
Code: Select all
bBuffer := System.Text.Encoding.Default:GetBytes( cString )
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Gemischtes / mishmash
Hallo
Hab den Fehler gefunden. Es ist schon beim einlesen falsch. Streamreader haut mir bei den Umlauten schon so einen Mist rein.
Ich weiss aber nun nicht was ich setzen muss, ab dem Property CurrentEncoding werde ich nicht schlau. Und warum macht er das überhaupt ? Gibts da einen globalen Schalter ?
Horst
Hab den Fehler gefunden. Es ist schon beim einlesen falsch. Streamreader haut mir bei den Umlauten schon so einen Mist rein.
Ich weiss aber nun nicht was ich setzen muss, ab dem Property CurrentEncoding werde ich nicht schlau. Und warum macht er das überhaupt ? Gibts da einen globalen Schalter ?
Horst
Gemischtes / mishmash
Hallo Horst,
Du kannst schon beim StreamReader das Encoding angeben (wäre ein zweiter Parameter).
Anders als VO arbeitet .NET intern immer mit Unicode. Damit lösen sich jede Menge Probleme mit fremden Zeichensätzen, aber damit ist ein Byte nicht mehr automatisch ein Zeichen.
Der StreamReader kann probieren, das für Dich aufzulösen, das geht aber gerne schief.
Zum Thema Encoding: es gibt da mehrere Klassen im Namespace System.Text:
System.Text.ASCIIEncoding
System.Text.UnicodeEncoding
System.Text.UTF32Encoding
System.Text.UTF7Encoding
System.Text.UTF8Encoding
Wenn Du mit ANSI-Dateien arbeitest, sollte System.Text.Encoding.Default passen:
https://docs.microsoft.com/en-us/dotnet ... ng.default
Das verwendet die für Dein System voreingestellte Codepage.
Wolfgang
Du kannst schon beim StreamReader das Encoding angeben (wäre ein zweiter Parameter).
Anders als VO arbeitet .NET intern immer mit Unicode. Damit lösen sich jede Menge Probleme mit fremden Zeichensätzen, aber damit ist ein Byte nicht mehr automatisch ein Zeichen.
Der StreamReader kann probieren, das für Dich aufzulösen, das geht aber gerne schief.
Zum Thema Encoding: es gibt da mehrere Klassen im Namespace System.Text:
System.Text.ASCIIEncoding
System.Text.UnicodeEncoding
System.Text.UTF32Encoding
System.Text.UTF7Encoding
System.Text.UTF8Encoding
Wenn Du mit ANSI-Dateien arbeitest, sollte System.Text.Encoding.Default passen:
https://docs.microsoft.com/en-us/dotnet ... ng.default
Das verwendet die für Dein System voreingestellte Codepage.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Gemischtes / mishmash
Horst,
kannst Du ein kleines Sample bauen? Quelldatei, paar Zeilen, wie Du das liest?
Würde das Helfen erleichtern
kannst Du ein kleines Sample bauen? Quelldatei, paar Zeilen, wie Du das liest?
Würde das Helfen erleichtern
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Gemischtes / mishmash
Das ist es
cBuffer := System.IO.StreamReader{ FileStream,System.Text.Encoding.Default}:ReadToEnd()
Ich habe aber dann GetEncoding (1252) von Chris genommen, traue diesem Default nicht.
Gruss
Horst
cBuffer := System.IO.StreamReader{ FileStream,System.Text.Encoding.Default}:ReadToEnd()
Ich habe aber dann GetEncoding (1252) von Chris genommen, traue diesem Default nicht.
Gruss
Horst
-
- Posts: 774
- Joined: Wed May 17, 2017 8:50 am
- Location: Germany
Gemischtes / mishmash
Hallo Horst,
Dein Streamreader benötigt das richtige encoding. Die X# Runtime verwendet diese beiden:
Runtimestate.WinEncoding // codepage 1252
Runtimestate.DosEncoding // codepage 850
Da Deine Quelle wahrscheinlich eine Ansi Datei ist sollte das hier passen:
cBuffer := System.IO.StreamReader{ FileStream ,Runtimestate.WinEncoding }:ReadToEnd()
Gruß
Karl-Heinz
Dein Streamreader benötigt das richtige encoding. Die X# Runtime verwendet diese beiden:
Runtimestate.WinEncoding // codepage 1252
Runtimestate.DosEncoding // codepage 850
Da Deine Quelle wahrscheinlich eine Ansi Datei ist sollte das hier passen:
cBuffer := System.IO.StreamReader{ FileStream ,Runtimestate.WinEncoding }:ReadToEnd()
Gruß
Karl-Heinz
Gemischtes / mishmash
Nä...Horst wrote:Das ist es
cBuffer := System.IO.StreamReader{ FileStream,System.Text.Encoding.Default}:ReadToEnd()
Keine Quelldatei, kein "wie kommt seine Datei in den Filestream"...
Habe eben geschrieben:
USING System.IO
FUNCTION Start( ) AS VOID
VAR fs := File.OpenRead( "D:JMF2020Webhome.html")
VAR cBuffer := System.IO.StreamReader{ fs ,Runtimestate.WinEncoding }:ReadToEnd()
? cBuffer
RETURN
Zeigt die Datei, aber mit Umlautfehlern, was nicht wundert, weil sie so beginnt:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
...
Schreibe ich:
VAR cBuffer := System.IO.StreamReader{ "D:JMFWebhome.html" ,System.Text.Encoding.UTF8}:ReadToEnd()
sind meine Umlaute da.
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Gemischtes / mishmash
Hallo FFF
Ich habe alle meine HTMLs mit Charset Windows-1252 definiert. Ich arbeite ja an einem Windwos PC und der WebDesigner schreibt sie Ansi auf die Platte. Ausserdem lese ich DBF Felder und fülle dann das Html. Ist alles Ansi.
Gruss
Horst
Ich habe alle meine HTMLs mit Charset Windows-1252 definiert. Ich arbeite ja an einem Windwos PC und der WebDesigner schreibt sie Ansi auf die Platte. Ausserdem lese ich DBF Felder und fülle dann das Html. Ist alles Ansi.
Gruss
Horst
Gemischtes / mishmash
Also jetzt bin ich 5 Milimeter vor der Ziellinie und habe 2 Riesenprobleme. Ich baue ja einen kleinen Webserver mit den XsharpService und dem HttpListener von Wolfgang.
Mein erstes Problem ist, ich kann den Service nicht stoppen. Ich weiss nicht wie man den HttpListerner stoppt. Das Servicemuster alleine von Wolfgang lässt sich starten und stoppen etc. mit dem HttpListerner muss ich jedesmal den Task (XSharpService) abschiessen.
Das zweite Problem. Der HttpListener läuft nicht asynchron. Wenn ich eine lange Pause (for next) einbaue sieht man deutlich das er eins nach dem anderen erledigt. Interessant ist, dass der Timer vom Service aber dazwischen funkt (ins Logfile schreibt) . Ich rufe wahrscheinlich die Routine am falschen Ort auf ??
Gruss und Mahlzeit
Horst
Mein erstes Problem ist, ich kann den Service nicht stoppen. Ich weiss nicht wie man den HttpListerner stoppt. Das Servicemuster alleine von Wolfgang lässt sich starten und stoppen etc. mit dem HttpListerner muss ich jedesmal den Task (XSharpService) abschiessen.
Das zweite Problem. Der HttpListener läuft nicht asynchron. Wenn ich eine lange Pause (for next) einbaue sieht man deutlich das er eins nach dem anderen erledigt. Interessant ist, dass der Timer vom Service aber dazwischen funkt (ins Logfile schreibt) . Ich rufe wahrscheinlich die Routine am falschen Ort auf ??
Gruss und Mahlzeit
Horst
- Attachments
-
- XharpServoice.zip
- (5.15 KiB) Downloaded 83 times