Hi! ASCII-Code nach ISO-Norm 8859-1 haben die "ÄÖÜäöü" hexwert "C4h,D6h,DCh,E4h,F6h" d.h. wenn man nun im Texteditor die Umlaute eingibt haben sie auch den entsprechenden o.g. Hexwert Wenn ich die ASCII-Code Tabelle mit dieser Routine Ausgebe #include <stdio.h> void main(void) { int i; for(i=0; i<256; i++) { printf("%d, %x, %c\n",i,i,i); } } Haben die Umlaute ganz andere Hexwerte für Ü = 9Ah, Ö = 99h, Ä = 8Eh. So jetzt die frage woher kommt der Unterschied? Hab nämlich das Problem diese Abweichung in meiner ASCII-CODE Tabelle zuberechnen. Weiss da jemand einen Rat bzw. hat ne Lösung?
Du beschreibst nicht, wo Du das "Programm" laufen lässt. Angenommen, es sei ein Konsolenfenster auf einem PC, dann gilt, daß dieses eine andere Zeichencodierung verwendet, nämlich die sogenannte Codepage 850 oder 437. Diese stammen noch aus der Ursteinzeit des PC und geben die von IBM eingeführte 8-Bit-Zeichencodierung wieder. Mach mal folgendes: Stelle im Konsolenfenster die Schriftart "Lucida Konsole" anstelle der Rasterschriftart ein. Gebe folgendes in der Eingabeaufforderung im selben Konsolenfenster ein: mode con cp select=1252 und rufe dann im selben Konsolenfenster Dein Programm auf. Na, was passiert?
Du bist drauf reingefallen, dass unter Windows der _ANSI_-Zeichensatz gilt. Der ASCII- ist mit dem ANSI-Zeichensatz nur bis 0x7F bzw. 127 (= die ersten 128 Zeichen) identisch. Da in beiden die Umlaute einen größeren Wert als 127 haben, hast du somit auch den Unterschied erklärt. HTH Ralf
Aha! Das würde bedeuten, dass ich im Editor oder wo auch immer den ANSI Zeichensatz rausschmeissen muss sonnst compiliert der mir ja falsch. Es geht darum auf einem Grafik Display Umlaute auszugeben und ich dachte das man mit dem ASCII-Code. Der µC den ich einsetzte ist ein Atmel AT89C51ED2 Trotzdem Danke!
Wenn Du ein LC-Display verwendest, dann musst Du schon ins Datenblatt des LC-Displays sehen, was das für einen Zeichensatz verwendet. Die beliebten HD44780-Controller haben oberhalb 0x7f eine völlig eigene Sichtweise und halten sich an keinerlei Norm. Der Anmerkung von Ralf sei noch hinzugefügt, daß ASCII nur einen 7-Bit-Zeichensatz beschreibt. 8-Bit-Zeichensätze vor ANSI (auch CP1252, Latin-1 oder ISO 8859-1) waren teilweise sehr kreativ "anders", wie der berühmte IBM-Zeichensatz, der des Atari ST oder die auf Macs verwendete Variante.
@Rufus! Das Display hat keinen Zeichensatz den muss ich ja selber bereitstellen und die Zeichen senden. Display ist von Electronik Assembly EA DIP122-5NLED
Hallo Norad, dann programmiere deinen Zeichensatz fürs Display so, dass er zu deinen ASCII Zeichen passt. Ich habe das gleiche Display und stand ebenfalls vor diesem Problem. Ich habe dann einfach den HC44780 Zeichensatz kopiert. Anbei eine ZIPped BMP Datei mit meinem Zeichengenerator. Liest sich von Links nach Rechts und alle Zeichen haben das Format 5x7 Pixel. Die grauen Linien dienen nur als Orientierung. MFG Kai
PS: Ich hab mir ein Spezieltool programmiert, das mir dieses BMP in HEX Code umwandelt. So muss ich die ganzen Daten nicht von Hand eingeben, ist bei 256 Zeichen ganz schön viel (~1,5kB mit einem Byte Abstand).
Ich hab meine Tabelle mal grob angepasst. Also wenn ich das richtig interpretiere muss ich den Ansicode von den Adressen her gleich abbilden d.h. die 256 Zeichen. Danke Kai.
>muss ich den Ansicode von den >Adressen her gleich abbilden d.h. die 256 Zeichen. Nach Deinem Beispiel: ja. Solltest Du Tastatureingaben auswerten, musst Du in der Dokumentation Deines Compilers nachschlagen, ob und wann zwei Bytes zurückgegeben werden (Unicode). Meist ist das aber nicht der Fall. Ich fasse mal kurz zusammen: Ein Windows-Programm (GUI) arbeitet normalerweise mit dem, was Microsoft ANSI-Format nennt. Das ist identisch mit der IANA-Bezeichnung "Windows-1252". Eine Gegenüberstellung der Zeichensätze gibt es hier: http://de.selfhtml.org/inter/sprache.htm ISO-8859-1 und Windows-1252 sind nicht identisch, was Du immer wieder erfährst, wenn Du mit Firefox auf Homepages gehst, die fahrlässigerweise in Windows erstellt und lediglich mit dem Internet Explorer getestet wurden oder umgekehrt mit dem Internet Explorer einen Linuxianer besuchst. HTH viele grüße ralph
Noch was vergessen: Ein Programm in der Windows-Konsole ("Eingabeaufforderung") arbeitet normalerweise mit einem Zeichensatz, den Microsoft ASCII nennt: http://msdn2.microsoft.com/de-de/library/9hxt0028(VS.80).aspx Manchmal wird er auch Codepage 850 genannt und wenn ein uraltes DOS-Programm keine richtigen Linien zeichnen kann, stellt man zweckmäßigerweise die Codepage auf 437 um. Rufus T. Butterfly hat gezeigt, wie man die Codepage in der Konsole auf Windows-1252 umstellen kann. viele grüße ralph
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.