StringLen - Probleme mit UTF-8

  • Hallo,

    mir ist gerade folgendes aufgefallen, was der Funktionsweise von StringLen im Grunde genommen widerspricht:

    Preisfrage:
    Wenn man ein Programm in UTF-8 abgespeichert und man folgendes eingibt:

    [autoit]

    msgbox(64,"",StringLen("€"))

    [/autoit]


    was ist das Ergebnis?

    Richtig 3! :thumbdown:

    Was natürlich bei allen anderen "Sonderzeichen" ebenfalls zu falschen Ergebnissen führt.

    Gibt es irgendein Mittel dagegen?

    Außer so Konstrukten wie:

    [autoit]

    msgbox(64,"",StringLen(BinaryToString(StringToBinary("€",1),4)))

    [/autoit]
  • Hi,

    also wirklich weiter bin ich noch nicht.

    Angenommen ich übergebe einer Funktion einen String, den ich dort in einzelne Zeichen zerlegen möchte, komme ich so nicht weiter, da die Anzahl per StringLen immer falsch sein wird, auch z.B. StringMid wird das eine z.B. €-Zeichen immer in drei Teile zerlegen, bei allen anderen String-Funktionen sieht es nicht besser aus ?(

    Muß ich nochmal drüber schlafen, ich glaub ich habe mich da "verrannt".

    Aber Danke mal!

  • Thread ausbuddel ...

    Obwohl das Problem teilgelöst ist - dies trat bei folgender Funktion der FF.au3 auf:

    Spoiler anzeigen
    [autoit]

    Func __FFValue2JavaScript(ByRef $sValue)
    If $sValue = "" Then Return ""
    Local $sTmp = "", $C

    [/autoit] [autoit][/autoit] [autoit]

    $sValue = StringRegExpReplace($sValue, "([\\""'])", "\\$1")
    $sValue = StringReplace($sValue, @CRLF, "\n")
    $sValue = StringReplace($sValue, @CR, "\r")
    $sValue = StringReplace($sValue, @TAB, "\t")

    [/autoit] [autoit][/autoit] [autoit]

    If StringRegExp($sValue, "[^\x00-\x7F]",0) Then
    For $i = 0 To StringLen($sValue)
    $C = StringMid($sValue,$i,1)
    If StringRegExp($C, "[^\x00-\x7F]",0) Then $C = StringFormat("\\u%0000s",Hex(AscW($C),4))
    $sTmp &= $C
    Next
    $sValue = $sTmp
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $sValue

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>__FFValue2JavaScript

    [/autoit]

    wenn das Script das die Funktion aufrief nicht in UTF-8 gespeichert war, was natürlich schwer vorherzusehen ist.
    Oder auch: Gibt es einen Weg herauszufinden wie der übergebene String kodiert ist?