TcpClient, Generic Text Only Printer und Encoding

27/08/2007 - 23:23 von Kigley | Report spam
Guten Abend!

Ich habe einen TcpListener, der auf den Port eines Generic Text Only
Printers hört, die Daten auslesen und verarbeiten soll. Funktioniert alles
toll. Nur Sonderzeichen nicht (àüöß?). Ich kann bei den Druckersettings
einstellen, was ich will - es wird laut Code (streamReader.CurrentEncoding)
immer Unicode(UTF-8) zurückgegeben.
Hier ist mein Code:
..
TcpClient tcpClient = AcceptTcpClient();
NetworkStream ns = tcpClient.GetStream();

if (ns.CanRead)
{
StreamReader sr = new StreamReader(ns, true);
String result = String.Empty;
result = sr.ReadToEnd();
File.WriteAllText(pathToFile, result, sr.CurrentEncoding);
sr.Close();
}
.
Also ich sage ja im Konstruktor von StreamReader, das er das Encoding
automatisch erkennen soll - mit diesem Encoding wird auch dann das File mit
dem Inhalt angelegt.
Egal, was ich probiere, es funktioniert nichts! Auch wenn ich das Encoding
selbst setze oder verschiedene Spracheinstellungen in den Druckersettings
versuche, es nutzt alles nichts. Die Sonderzeichen funktionieren nie!

Könnt ihr mit bitte Tipps geben?

Danke
Martin Zeller
 

Lesen sie die antworten

#1 Thomas Scheidegger [MVP]
27/08/2007 - 23:33 | Warnen spam
Hallo Martin

Ich habe einen TcpListener, der auf den Port eines Generic Text Only
Printers hört, die Daten auslesen und verarbeiten soll. Funktioniert alles toll.
Nur Sonderzeichen nicht (àüöß?). Ich kann bei den Druckersettings
einstellen, was ich will - es wird laut Code (streamReader.CurrentEncoding)
Egal, was ich probiere, es funktioniert nichts! Auch wenn ich das Encoding
selbst setze oder verschiedene Spracheinstellungen in den Druckersettings
versuche, es nutzt alles nichts. Die Sonderzeichen funktionieren nie!




Default (verstellbar!) hat der 'Generic Text Only' Druckertreiber bei uns offenbar die Codepage 1252 ('Windows Ansi')
http://www.microsoft.com/globaldev/...WinCP.mspx


also muss man in .NET explizit beim StreamReader im _Konstruktor_ als Parameter angeben:
Encoding.GetEncoding( 1252 )
oder ggf automatisch vom System die Windows-Ansi übernehmen:
Encoding.Default




Thomas Scheidegger - MVP .NET - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen