Drucker erkennt "ü" nicht

ich habe ein Programm geschrieben das eine Textdatei ausgibt, die dann von Word eingelesen und gedruckt wird. Diese Datei bleibt eine Textdatei (txt) solange ich sie nicht mit „speichern als“ neu mit der Erweiterung „doc“ speichere.
Das eigentliche Problem ist aber, dass der Drucker (ein Brother Laser) das kleine „ü“ nicht erkennt. An seiner Stelle wird immer eine schwarze Raute, die ein weißes Fragezeichen enthält gedruckt.
Für alle anderen Umlaute und Sonderzeichen habe ich die ASCII-Codes erkennen können und wandle sie in meinem Programm so um, dass der Ausdruck richtig ist.
Um das auch beim „ü“ machen zu können müsste ich wissen welchen Code oder welche 2 Codes der Drucker ehält, um diese Raute zu drucken. Ich habe mir eine Codetabelle mit den Ascii-Codes von 33-256 am Drucker drucken lassen. Dort habe ich dann die Zeichen gefunden, die falsch übersetzt werden und dann eine entsprechende Übersetzung in mein Programm geschrieben. Nur für diese schwarze Raute mit Fragezeichen finde ich den erzeugenden Code in dieser Tabelle nicht.
Meine Frage ist also: welches/welche Zeichen erzeugen diese Raute?

Vielen Danke für eure Hilfe schon im Voraus!

Grüße
kilix

Hi,

vielleicht solltest du deine Textdatei vom Programm aus mit der richtigen Codierung speichern, dan musst du auch nichts „übersetzen“. Richtig wäre vermutlich die Codierung utf-8.

ist ein Ersetzungszeichen:

Ansonsten hier die ASCII-Tabelle:
https://www.ascii-code.net/

Gruß
Christa

1 Like

Hi!

ASCII selbst kennt nur die Zeichen mit Code 0…0x7F (=127). Alles ab darüber ist variabel, es gibt verschiedene Standards (Codierungen), die in verschiedenen Teilen der Welt verwendet werden, um deren spezifische Zeichen abzubilden. Die ISO8859-1 nennt sich auch „Westeuropäisch“, und enthält die deutschen Sonderzeichen, aber auch die französischen, spanischen etc…

Darin wären dann:

Ä   0xC4 
Ö   0xD6
Ü   0xDC
ä   0xE4 
ö   0xF6
ü   0xFC
ß   0xDF

Das Problem ist, dass dein Computer raten muss, was für eine Codierung das ist, und das kann schief gehen.

Möglicherweise ist UTF-8 da hilfreich, da werden diese Zeichen mit zwei Bytes dargestellt:

Ä   0xC3 0x84
Ö   0xC3 0x96
Ü   0xC3 0x9C
ä   0xC3 0xA4 
ö   0xC3 0xB6
ü   0xC3 0xBC
ß   0xC3 0x9F

ggf. setzt du ganz an den Anfang der Datei noch 0xEF 0xBB 0xBF, das ist die BOM, eine Markierung, an der Programme eigentlich erkennen sollten, dass die Datei UTF-8 kodiert ist.

Mal was anderes: Wo mit programmierst du denn da? Manche Sprachen können das automatisch…

Ich danke euch für eure Antworten. Leider bin ich mit dem Programmieren in dieser Hinsicht nicht gut bewandert. Ich habe erst von ein paar Monaten begonnen FreeBasic zu programmieren nachdem ich das letztemal in den 1970er Jahren als Projektleiter und Systemdesigner mit einer Dev PdP 11/70 gearbeitet und damals ein paar Quick&Dirty-Programme für eigene Analysen in Dec Basic geschrieben habe.
Jetzt habe ich mit FreeBasic begonnen, um im Alter eine Aufgabe zu haben die mein Hirn anstrengt!
Was nun diese Codes betrifft:
ich habe z.B. heraus gefunden, dass der Drucker statt einen „ü“ (Ascii 252) die Zeichen Ascii 195 und 188 gedruckt hat. D.h. ich wandle in einer Programmfunktion diese Zeichenkombination in „ü“ (Ascii 252) um. Das funktioniert aberim Fall dieser Raute da ich nicht weiß welcher Code sie erzeugt. Es gibt offenbar noch eine andere Möglichkeit für das „ü“ (das hatte ich auch schon bei anderen Zeichen).
Als Beispiel: in meiner Funktion erfolgt die Umwandlung wie folgt:
text = ersetzeZeichenkette(text, chr(195, 188), chr(252)) ’ ü
wobei „ersetzeZeichenkette“ eine Funktion ist die den Text für die Umwandlung ich Zeichen zerlegt etc.
Im Falle dieses „ü“ war es einfach weil der Drucker die beiden Zeichen für 195 und 188 ausgedruckt hatte und ich sie nur in der Codetabelle suchen mußte.

sweber hat oben 2 Beispiele von Codierungen gebracht. Leider verstehe ich sie nicht weil ich mit UTF-8 etc. noch nie zu tun hatte. Ich weiß daher auch nicht wie ich z.B. die Codes 0xC3 0xBC in meine Umwandlung einsetzen kann.

Grüße
kilix

Hallo nochmal,

ich habe das hier gefunden, und ich denke, dass das, was auf Seite 2 steht, dir helfen könnte:
https://www.freebasic-portal.de/tutorials/umlaute-richtig-darstellen-25.html

Viele Grüße
Christa

1 Like

Hallo @kilix,
die Zahlen von @sweber sind im Hexadezimalsystem, deine Zahlen im Dezimalsystem. Seine Angabe, das Ä entspreche dem Code 0xC4, bedeutet wegen C=12 also, dass du für dein Programm 12*16+4=196 rechnen musst und das Ä unter der Nummer 196 findest.
Liebe Grüße
vom Namenlosen

@ Namenloser
danke, das hätte ich mir denken können aber so weit hat meine Fantasie nicht gereicht. Das von Hex in Asii umzuwandeln ist kein Problem!

@ Christa,
danke für den Link, den kenne ich und die Umwandlung CharToOem verwende ich regelmäßig - allerding dann wenn ich im Dialog eine Frage beantworte und die Antwort dann an eine andere Stelle im Konsolenformular ausgebe.
Habe CharToOem für diesen Fall verwendet, Damit wurde die Raute in „" konvertiert. Versuchsweise habe ich den "“ in meine Konvertierungsfunktion eingebaut und damit erhielt ich das „ü“. Die Sache hat aber den Haken, dass jetzt andere Umlaute und Sonderzeichen nicht mehr richtig sind. Auch das „" das ich zur Konvertierung in das „ü“ verwende würde mir alle richtigen "“ in „ü“ konvertieren. Das ist also eine Sache, die ich mir noch genauer ansehen muss. Übrigens habe ich das Problem nicht nur am Drucker, es besteht auch schon im Word-Dokument.
Möglich, dass ich auf WORD ganz verzichte und direkt auf den Drucker ausgebe, da würde dieses Problen ziemlich sicher wegfallen.
Ich seh mir das an und melde mich wieder!
Danke und Grüße
kilix

ich möchte mich nochmals für eure Beiträge bedanken. Nachdem bis auf dieses eine Zeichen, das schon falsch ist wenn der Text auf die der Textverarbeitung zugrunde liegende Textdatei gespeichert wird, aber alle anderen Zeichen richtig dargestellt werden, werde ich nicht weiter eine Lösung suchen. Das umsomehr als ich die Software nicht weitergebe und nur für mich selbst benütze.
Danke und ich frage gerne wieder wenn ich Probleme habe bei denen ich nicht weiterkomme.

Grüße
kilix

3 Like