In meinem neuen Unicode Enter Skript gibt es einen Bug, den ich nicht zu beheben weiß.
Ich muss bei einem String wissen, wie oft man Backslash drücken muss, um den String zu löschen. Eigentlich sollte es über strlen() gehen. Aber es liefert bei manchen Unicode Zeichen unerwarteterweise den Wert 2.
Beispiel:
Sieht gut aus.
Warum Länge 2?
Das kann man mit diesen drei Dateien selbst nachvollziehen (in einen gleichen Ordner herunterladen und Skript starten):
https://www.dropbox.com/s/awvsuddyordfkic/test.ahk?dl=1
https://www.dropbox.com/s/n8iks1d4spcbp ... 1.txt?dl=1
https://www.dropbox.com/s/bzpiy7iazuy6w ... 2.txt?dl=1
Warum ist das so? Ich vermute, es hat etwas mit dem Character Code zu tun. Wie kann ich die tatsächliche Länge eines Strings ermitteln, welches solche Unicode-Zeichen enthält, um zu wissen, wie oft man Backslash drücken muss, um den String wieder zu löschen?
[solved] String Länge bei Unicode Zeichen
Moderator: jNizM
[solved] String Länge bei Unicode Zeichen
Last edited by bichlepa on 25 May 2017, 13:08, edited 1 time in total.
Scripting is too complicated? Try AutoHotFlow, the graphical automation tool! Written in AutoHotkey.
Re: String Länge bei Unicode Zeichen
Habe heute mit ascii herum gespielt. Ohne viel über die materie zu wissen - wird in dem von dir geschilderten beispiel evtl die anzahl der stellen > "dreistellig" gezählt??
Re: String Länge bei Unicode Zeichen
Was meinst du damitBoBo wrote:wird in dem von dir geschilderten beispiel evtl die anzahl der stellen > "dreistellig" gezählt??
Scripting is too complicated? Try AutoHotFlow, the graphical automation tool! Written in AutoHotkey.
Re: String Länge bei Unicode Zeichen
Um das ganze zu verstehen muss man Unicode verstehen. ( die Utf-x codierung )
AutoHotkey verwendet eine Utf-16 Encodierung. In dieser Encodierung ist jeder sogenannte Codepoint 16 bits lang, ABER ein Zeichen kann aus mehreren Codepoints bestehen.
Was AutoHotkey macht beim StrLen Befehl ist die Codepoints zu zählen.
Da ab Zeichen einer gewissen Größenordnung 2 Codepoints brauchen braucht, gibt AutoHotkey dann die Nummer 2 zurück.
Ich bin Normalerweise gegen Youtube tutorials aber dieses Video beschreibt es wirklich gut:
Ich finde man sollte dieses Verhalten ändern.
AutoHotkey verwendet eine Utf-16 Encodierung. In dieser Encodierung ist jeder sogenannte Codepoint 16 bits lang, ABER ein Zeichen kann aus mehreren Codepoints bestehen.
Was AutoHotkey macht beim StrLen Befehl ist die Codepoints zu zählen.
Da ab Zeichen einer gewissen Größenordnung 2 Codepoints brauchen braucht, gibt AutoHotkey dann die Nummer 2 zurück.
Ich bin Normalerweise gegen Youtube tutorials aber dieses Video beschreibt es wirklich gut:
Ich finde man sollte dieses Verhalten ändern.
Recommends AHK Studio
Re: String Länge bei Unicode Zeichen
Danke für das Video. Es ist wirklich informativ!
Das Verhalten sollte man wirklich ändern. Bei einem loop,parse taucht das gleiche Problem auf. Manche Unicode Zeichen werden wie zwei behandelt.
Das Verhalten sollte man wirklich ändern. Bei einem loop,parse taucht das gleiche Problem auf. Manche Unicode Zeichen werden wie zwei behandelt.
Scripting is too complicated? Try AutoHotFlow, the graphical automation tool! Written in AutoHotkey.
Re: String Länge bei Unicode Zeichen
Ich habe jetzt mit dem neuen Wissen weitergeforscht und gefunden, dass im Programm die großen Unicode Zeichen in sogenannten Surrogates repräsentiert werden.
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
Ich konnte mit dem Wissen ein Workaround finden.
Statt strlen() verwende ich jezt diese Funktion:
https://msdn.microsoft.com/de-de/librar ... s.85).aspx
Ich konnte mit dem Wissen ein Workaround finden.
Statt strlen() verwende ich jezt diese Funktion:
Code: Select all
new_strlen(newstrlen_string)
{
newstrlen_length:=0
loop,parse,newstrlen_string
{
newstrlen_length++
Transform,newstrlen_charnumber,asc,%A_LoopField%
if (newstrlen_charnumber >= 0xDC00 && newstrlen_charnumber <= 0xDFFF)
newstrlen_length--
}
return newstrlen_length
}
Scripting is too complicated? Try AutoHotFlow, the graphical automation tool! Written in AutoHotkey.
Who is online
Users browsing this forum: No registered users and 37 guests