COCYHOK
Verunsicherungsmakler
Dabei seit: 04.10.2003
Beiträge: 1.079
Herkunft: CCCP
|
|
DOS-Programmierung: ASCII-Wirrwarr |
|
Hab kürzlich mal n Proggy in TP geschrieben (Compiler für DOS-Programme). Um eine leere Fläche irgendwie auszufüllen, bediene ich mich gerne der ASCII-Zeichen 219 bis 223. Mit diesen lasse ich zufällig die Fläche ausfüllen. Wenn ich das Programm innerhalb von TP starte, gibts keine Probs (meistens). Wenn ich aber unter Win98 die EXE mit dem Explorer direkt starte, erscheinen die Zeichen 221 und 222 wie die ANSI-Zeichen ¦ und Ì. Was kann man da machen? Warum werden 219, 220 und 223 als ASCII dargestellt und nur 221 und 222 als ANSI (was ja faktisch gar nicht geht)?
__________________ Es ist eine Frage, ob wir nicht, wenn wir einen Mörder rädern, grade in den Fehler des Kindes verfallen, das den Stuhl schlägt, an dem es sich stößt.
Georg Christoph Lichtenberg, 18. Jahrhundert
|
|
12.10.2003 20:25 |
|
|
phlox81
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
Der ASCII Zeichensatz legt lediglich die ersten 128 Zeichen fest...
Devil
__________________ Intelligenz ist eine Illusion des Menschen
phlox81.de | codenode.de
|
|
12.10.2003 20:46 |
|
|
COCYHOK
Verunsicherungsmakler
Dabei seit: 04.10.2003
Beiträge: 1.079
Herkunft: CCCP
Themenstarter
|
|
FALSCH!
Ich weiß zwar nicht genau, wie es ist, aber entweder sind die ersten 128 Zeichen gleich und die zweiten 128 Zeichen verschieden oder es sind alle verschieden. Aber die zweiten 128 (erweiterten) Zeichen sind auf jedenfall zwischen ANSI und ASCII verschieden! Kannst ja mal ne Stichprobe machen! Öffne die DOS-Box (unter WinXPlosion wird vieleicht sogar in der DOS-Box der ANSI-Zeichensatz verwendet - wäre anzunehmen) und gib per Alt ein Zeichen von 129 bis 255 ein. Öffne dann Notepad und gib den gleichen Code ein. Die Zeichen werden verschieden sein (wenn du nicht zufällig gerade eins erwischt hast, das gleich ist)! Ein gutes Beispiel sind die Rahmenzeichen. Hast du jemals in einer Windowsanwendung diese Zeichen gesehen?
__________________ Es ist eine Frage, ob wir nicht, wenn wir einen Mörder rädern, grade in den Fehler des Kindes verfallen, das den Stuhl schlägt, an dem es sich stößt.
Georg Christoph Lichtenberg, 18. Jahrhundert
|
|
12.10.2003 21:43 |
|
|
|
phlox81
Bote des Lichts und Moderator
Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo
|
|
Zitat: |
Original von COCYHOK
FALSCH!
|
Nein, RICHTIG.
Devil
__________________ Intelligenz ist eine Illusion des Menschen
phlox81.de | codenode.de
|
|
12.10.2003 22:13 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
|
|
nix falsch
wenn du genau darauf achtest, dann siehst du, dass die ersten 128 gleich sind, denn die buchstaben und ziffern+sonderzeichen haben alle denselben wert
hier ist ein VBS Script, welches dir die zeichen zusammen mit dem Wert in die "asciicode.txt" ausgibt (einfach in eine Textdatei reinkopieren und die Endung VBS verpassen):
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
|
set fso = wscript.createobject("scripting.filesystemobject")
SET Shell=CreateObject("Wscript.Shell")
ausgabe="asciicode.txt"
Dim Zahl1, ergebniss
On Error Resume Next
init
schreibe
starte
Function init
If fso.fileexists(ausgabe) Then Ask=MsgBox("Existiert bereits, überschreiben?", vbyesno + vbquestion,"Nochmal erstellen? Ohne Sinn ...")
If Ask=vbNo Then wscript.quit
End Function
Function schreibe
SET out=fso.CreateTextFile(ausgabe)
For i=0 to 255
out.writeline(Zahl1 &" "&Chr(Zahl1))
Zahl1=Zahl1+1
Next
End Function
Function starte
Shell.run(ausgabe)
If Err.Number >0 Then Shell.popup "Unerwarterter Fehler ist augetreten!"&vbcrlf&"Wahrscheinlich ist der Ordner/Datei schreibgeschützt..."&vbcrlf&"oder Sie haben keine Schreibberechtigung oder"&vbcrlf&"der Ilja sitzt vor diesem PC...oder..."&vbcrlf&"Meinen Sie ich habe an diesem Abend nichts "&vbcrlf&"besseres zutun als für jeden erdenklichen Fehler,"&vbcrlf&"den Sie verursachen könnten, ne Meldung zu machen?",,"Schitt, ein Fehler...",vbokonly+vbcritical+vbsystemmodal
If err.number<1 Then MsgBox "Keine Fehler aufgetreten, die Datei wurde neu erstellt!",vbokonly+vbinformation,"Ascii Code ok..."
End Function
|
|
Notepad hat nur keine Zeichendarstellung bis 32, weil davor auch die ganzen (unter Win als Steuerzeichen) genutzten zeichen kommen...
siehe noch mal Devil's
Zitat: |
Der ASCII Zeichensatz legt lediglich die ersten 128 Zeichen fest...
|
nicht ANSI !
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von CDW: 12.10.2003 21:57.
|
|
12.10.2003 21:53 |
|
|
COCYHOK
Verunsicherungsmakler
Dabei seit: 04.10.2003
Beiträge: 1.079
Herkunft: CCCP
Themenstarter
|
|
Warte mal
1.: Sowohl der ASCII(DOS)-Zeichensatz, als auch der ANSI(Win)-Zeichensatz besteht aus 256 Zeichen. Die Zeichensätze werden jeweils unterteilt in den Standard-Zeichensatz (0 bis 128) und den erweiterten Zeichensatz (129 bis 255). Ich sage, Die Zeichen 129 bis 255 sind AUF JEDEN FALL (siehe z.B. Zeichen #200) zwischen ANSI und ASCII verschieden!! Ich glaube, ihr redet am Thema vorbei, denn Folgendes:
2.: Der Einfachheit halber bleiben wir beim Zeichen 200: Wenn du die Konsole öffnest und Alt-200 eingibst, siehst du ein Rahmenzeichen; Gibst du diese Tastenkombination aber in einem Win-Programm ein, erscheint ein +! Das heißt erstmal, dass ASCII129-255 <> ANSI129-255, gell? Nun zu meinem Problem: Ich schreibe also in den Quelltext, dass im Programm später an irgendeiner Stelle das Zeichen mit dem Code 200 erscheinen soll. Da sowohl der Compiler als auch das fertige Programm DOS-Programme sind, steht nur der ASCII-Code zur Verfügung und es ist faktisch unmöglich, dass jemals ein Zeichen aus dem erweiterten ANSI-Code erscheint, auch gell? ABER GENAU DAS IST IN MEINEM PROGRAMM DER FALL: Manchmal erscheint an dieser Stelle ein Rahmenzeichen, manchmal ein +. Das geht bitteschön wie?
Nochwas: Was ist das für ne Sprache, dieser Code da oben?
__________________ Es ist eine Frage, ob wir nicht, wenn wir einen Mörder rädern, grade in den Fehler des Kindes verfallen, das den Stuhl schlägt, an dem es sich stößt.
Georg Christoph Lichtenberg, 18. Jahrhundert
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von COCYHOK: 13.10.2003 23:20.
|
|
13.10.2003 23:17 |
|
|
|
|
|