einzeilig UniCode dekodieren

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: einzeilig UniCode dekodieren

Re: einzeilig UniCode dekodieren

Post by garry » 10 Apr 2019, 15:11

Rohwedder / just me
alle Beispiele funktionieren
Vielen Dank
vorher mehrere Dutzend Zeilen mit jedem special Character :

Code: Select all

stringreplace,aab,aab,ü,ü,all
stringreplace,aab,aab,ü,ü,all
EDIT :
20190411 https://www.ka-news.de , Hier hatte ich kein Ergebnis ( wegen Störung ) , aber natürlich bei Störung oder URL-Aenderung funktioniert script nicht
https://www.ka-news.de/region/karlsruhe/In-eigener-Sache-Serverprobleme-bei-ka-news-behoben-Seite-teilweise-noch-nicht-erreichbar;art6066,2364716

Re: einzeilig UniCode dekodieren

Post by just me » 10 Apr 2019, 09:52

Moin,

bei langen Texten könnte es sich lohnen, sich die Fundposition zu merken, um dort wieder aufzusetzen:

Code: Select all

T := "Israel wählt rechts, religiös und natürlich rechtsreligiös"
Pos := 1
While (Pos := RegExMatch(T, "&#(x*\w+);", Muster, Pos)) ; #x hexadezimalen und # dezimalen Code dekodieren
	T := StrReplace(T, Muster, Chr("0" Muster1))
MsgBox,% T
Möglicherweise bringt es auch manchmal etwas, wenn man StrReplace() durch RegExReplace() ersetzt, weil man auch hier die Fundposition nutzen kann:

Code: Select all

T := "Israel wählt rechts, religiös und natürlich rechtsreligiös"
Pos := 1
While (Pos := RegExMatch(T, "&#(x*\w+);", Muster, Pos)) ; #x hexadezimalen und # dezimalen Code dekodieren
	T := RegExReplace(T, Muster, Chr("0" Muster1), , , Pos)
MsgBox,% T
Für etwas mehr Zuverlässigkeit kann die Posix-Klasse xdigit sorgen:

Code: Select all

T := "Israel wählt rechts, religiös und natürlich rechtsreligiös"
Pos := 1
While (Pos := RegExMatch(T, "&#(x[[:xdigit:]]{1,4}|\d{1,5});", Muster, Pos)) ; #x hexadezimalen und # dezimalen Code dekodieren
	T := RegExReplace(T, Muster, Chr("0" Muster1), , , Pos)
MsgBox,% T

Re: einzeilig UniCode dekodieren

Post by Rohwedder » 10 Apr 2019, 07:55

Hallo,
mit der Auswertung von Webseitenquelltext habe ich keine Erfahrung.
Klappt das so?

Code: Select all

T = Israel wählt rechts, religiös und natürlich rechtsreligiös
While, RegExMatch(T, "&#(x*\w+);", Muster) ;#x hexadezimalen und # dezimalen Code dekodieren
	T := StrReplace(T, Muster, Chr("0" Muster1))
MsgBox,% T

Re: einzeilig UniCode dekodieren

Post by garry » 09 Apr 2019, 16:02

danke für's script
habe in Beispiel script , news_reader , hier ergänze ich jedes Unicode Character einzeln ( aab ist variable ganzer text )
( nur wenig Beispiele hier ) :
https://www.autohotkey.com/boards/viewtopic.php?f=10&t=60530

alt:

Code: Select all

stringreplace,aab,aab,ã,ã,all
;- leider existiert auch noch die Variante :  ( dezimal oder Hex )
stringreplace,aab,aab,ü,ü,all
stringreplace,aab,aab,ü,ü,all
konnte dieses script gut gebrauchen , im Moment so ( da ich regex immer noch nicht behersche )
neu:

Code: Select all

stringreplace,aab,aab,#x,#x00,all
;DateiName = Türschloßfräser.txt;
;UniCode dekodieren
While, RegExMatch(aab, "&#(x\w{4});", Muster)
	aab := StrReplace(aab, Muster, Chr("0" Muster1))
return

Re: einzeilig UniCode dekodieren

Post by just me » 09 Apr 2019, 08:55

Moin,

meines Wissens nicht, weil Du die Treffer $0 ... $n im Parameter Replacement nicht an einen Ausdruck übergeben kannst.

einzeilig UniCode dekodieren

Post by Rohwedder » 09 Apr 2019, 08:29

Hallo,
in der Sessiondatei von Notepad++ %A_AppData%\Notepad++\session.xml
sind die Sonderzeichen in Dateinamen per UniCode kodiert.
Z.B: Türschloßfräser.txt als Türschloßfräser.txt
Die Dekodierung gelingt mit:

Code: Select all

DateiName = Türschloßfräser.txt
;UniCode dekodieren
While, RegExMatch(DateiName, "&#(x\w{4});", Muster)
	DateiName := StrReplace(DateiName, Muster, Chr("0" Muster1))
;Türschloßfräser.txt
MsgBox,% "DateiName:`n" DateiName
Just for fun:
Kann die 2-zeilige Whileschleife durch ein RegExReplace ersetzt werden?

Top