Komischer Windows XP Bug ANSI <-> UNICODE in Notepad

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Ty
Beiträge: 8
Registriert: 26.04.2005 10:11
Wohnort: Baden-Württemberg

Komischer Windows XP Bug ANSI <-> UNICODE in Notepad

Beitrag 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?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Komischer Windows XP Bug ANSI <-> UNICODE in Notep

Beitrag von Kiffi »

:? daschamalseltsam

wenn man anstelle von

Code: Alles auswählen

ansi$="secret:xxxxxxxxxxxxxxx xxxxxxxxxxx"
folgendes schreibt

Code: Alles auswählen

ansi$="secret:xxxxxxxxxxxxxxxxxxxxxxxxxx"
dann wird die Datei korrekt angezeigt.

(@Ty: kannst ja mal WriteStringFormat(1, #PB_UTF8) vor dem ersten
WriteString ausführen lassen)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Beitrag 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...
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Ist genauso, wenn man "Bush hid the facts" schreibt, dann ist das auch nicht mehr lesbar.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Ty
Beiträge: 8
Registriert: 26.04.2005 10:11
Wohnort: Baden-Württemberg

Beitrag 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.
Little John

Re: Komischer Windows XP Bug ANSI <-> UNICODE in Notep

Beitrag 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) :D

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
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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 :mrgreen:
Kinder an die Macht http://scratch.mit.edu/
Antworten