Seite 1 von 1
Komischer Windows XP Bug ANSI <-> UNICODE in Notepad
Verfasst: 27.10.2008 13:38
von Ty
Gerade bin ich über einen komischen Windows XP Bug gestolpert.
Code: Alles auswählen
ansi$="secret:xxxxxxxxxxxxxxx xxxxxxxxxxx"
CreateFile(1, "x.txt")
WriteString(1, ansi$)
CloseFile(1)
RunProgram("notepad.exe", "x.txt", "")
Ich weiß nicht, wie Notepad darauf kommt, das es sich hierbei um eine UNICODE Datei handelt. Jedenfalls zeigt Notepad die Datei unter VISTA richtig an.
Meistens benutze ich noch Notepad2 als Editor und das Programm zeigt den selben Fehler.
Liegt das vielleicht an einem fehlerhaften Security Patch von Windows XP?
Re: Komischer Windows XP Bug ANSI <-> UNICODE in Notep
Verfasst: 27.10.2008 14:03
von Kiffi

daschamalseltsam
wenn man anstelle von
folgendes schreibt
dann wird die Datei korrekt angezeigt.
(@Ty: kannst ja mal
WriteStringFormat(1, #PB_UTF8) vor dem ersten
WriteString ausführen lassen)
Grüße ... Kiffi
Verfasst: 27.10.2008 14:06
von KatSeiko
XP ist Betriebssystem-Technisch ein Großvater... Vor neun Jahren war Unicode nicht wirklich verbreitet, weshalb diese Erkennung nicht wirklich wichtig war. Umgekehrt ist es aber auch so, dass man den Vista-Editor auch verdrehen kann, indem man eine genau gerade Zahl von Bytes in eine Textdatei schreibt. Dann nimmt er nämlich erst einmal an, dass es sich um Unicode handelt (weil 1 Zeichen Unicode aus 2 Byte besteht, während ein Zeichen ASCII nur aus einem Byte besteht...)
Man kann nur mit den Tücken dieser Betriebssysteme zu leben versuchen...
Verfasst: 27.10.2008 14:25
von RSBasic
Ist genauso, wenn man "Bush hid the facts" schreibt, dann ist das auch nicht mehr lesbar.
Verfasst: 27.10.2008 14:34
von Ty
Ich glaub, ich habe es verstanden. Der "Fehler" liegt wohl in der IsTextUnicode API Funktion.
Code: Alles auswählen
string1$="secret:xxxxxxxxxxxxxxx xxxxxxxxxxx"
string2$="this app can break"
ansi$ = string1$
*MemoryID = AllocateMemory(Len(ansi$) + 1)
PokeS(*MemoryID, ansi$)
If IsTextUnicode_(*MemoryID, Len(ansi$), #Null)
Debug "is unicode"
Else
Debug "is ansi"
EndIf
Viele Wortkombinationen 4 3 3 5 werden damit als Unicode erkannt. Und da Notepad.exe und Notepad2.exe diese Funktion benutzen, scheitern sie am Problem.
Re: Komischer Windows XP Bug ANSI <-> UNICODE in Notep
Verfasst: 27.10.2008 14:52
von Little John
Ty hat geschrieben:Gerade bin ich über einen komischen Windows XP Bug gestolpert.
Ich habe das Ursprungsbeispiel noch "optimiert" (24 Zeichen weniger)
Code: Alles auswählen
ansi$ = "se:xxx xxx"
CreateFile(1, "x.txt")
WriteString(1, ansi$)
CloseFile(1)
RunProgram("notepad.exe", "x.txt", "")
(getestet mit Windows XP Pro SP3)
Gruß, Little John
Verfasst: 03.11.2008 01:44
von Xaby
Also mit XP hat es nichts zu tun.
Der Explorer zeigt es als normalen Text an. Alle anderen mir bekannten Schreibprogramme (WordPad, OpenOffice, Proton ...) zeigen es auch als
se:xxx xxx
an.
Und sind wir mal ehrlich, woher soll ein Programm aus einer Datei auch erahnen, um welchen Typ es sich handelt, wenn die Datei Kopf los ist?
Jedes andere Dokument hat einen Header.
Mir war ja so als würde der Editor von Windows 98SE noch nachfragen, welchen Typs die Textdatei ist, also ob ASCII oder UNICode.
Und bei UniCode unter Umständen dann noch ob soherum oder soherum.
Intel oder Motorola
