Zeichensatz-Probleme beim Schreiben in MariaDB

  • Ich hab das kurz per For-Schleife in den Array-Reader eingehängt:

    Nun passt's bei der Array-Darstellung (Und somit vermutlich für meine Weiterverarbeitung)

    allerdings ist nun die Console-Ausgabe Mist. :rolleyes:.

    Gut, damit könnte ich noch leben. Mir wär's aber lieber, wenn ich mal ALLES einfach auf UTF-8 einstellen könnte und in RUHE damit arbeiten.

    (Noch besser wär alles verstehen)

  • Für die Consolenausgabe werden die AutoIt-Strings intern nach ANSI konvertiert. Mit dem 'falschen' Format klappt das, weil sich alle Zeichen in ANSI abbilden lassen. Das 'richtige' Format enthält aber Unicode-Zeichen, für die es in ANSI keine Entsprechung gibt. Die werden bei der Konvertierung mit ? ersetzt. Und weil Deine SCIte-Konsole auf UTF8 eingestellt ist, werden anscheinend für bei UTF8 nicht zulässige ANSI-Zeichen die Hex-Werte angezeigt.

  • So. Habe nun noch eine weitere Fehlerquelle eliminiert:

    Es gibt einen speziellen ODBC-Treiber für MariaDB. (Den findest auch nicht gleich wenn du nicht ganz gezielt danach suchst.) Bislang war ich mit dem mysql-ODBC Treiber unterwegs weil es so irgendwo mal drin stand, Der dann zwar vieles, aber eben nicht alles richtig macht.

    Und damit lies sich dann die bisher mangelhafte Excel-Darstellung der Daten ebenfalls beheben. Somit ist nun die UTF-8 -Kette ziemlich konsistent:

    Input(Text) --> Array OK

    Array--> MariaDB OK

    MariaDB --> phpMyAdmin und dBeaver OK

    MariaDB--> Excel OK

    MariaDB--> Array OK

    Überall wird endlich das gleiche angezeigt. Nur die Konsole "sagt" noch was anderes. Aber das ist nun wenigstens auch konsequent falsch :)

    Derzeit/mittlerweile sind übrigens ALLE Konvertierungen ausgeschaltet. (!) (so wie es bitnugger eigentlich auch mal prophezeit hatte). Das heißt für mich, dass alles native durchgeht. Kann sein, dass ich für Konsole-Zwecke noch was spezielles mache. Allein schon um Klarheit darüber zu bekommen was wo passiert :)


  • So, jetzt hammas :)

    Mit der kleinen UDF kann ich die Strings dann auch korrekt auf die Konsole ausgeben:

    Code
    FUNC ConsoleWriteUTF8($sString)
        $sString = _WinAPI_WideCharToMultiByte($sString,65001)
        ConsoleWrite($sString)
    EndFunc


    Somit ist nun ENDLICH alles in UTF8 (mb4)

    Vielen Dank an alle die geholfen haben.

    Was den Einwand Hilfestellung vs Tutorial betrifft.

    Erst war's ne Hilfestellung, dann ein Tutorial, jetzt wurd's ne Hilfestellung....

    Fehlt: ein Tutorial. Werd ich machen. Allein schon, um meine Einstellungen zu dokumentieren...

  • Es sollte auch mit internen AutoIt-Funktionen gehen:

    AutoIt
    FUNC ConsoleWriteUTF8($sString)
        ConsoleWrite(BinaryToString(StringToBinary($sString, 4), 1))
    EndFunc
  • $sString = _WinAPI_WideCharToMultiByte($sString,65001)

    AutoIt stürzt ab, wenn der Funktion kein Datentyp "String" übergeben wird.

    Besser so:

    $sString = _WinAPI_WideCharToMultiByte(String($sString),65001)

    So habe ich es anfangs auch gemacht... seit längerem aber so wie Velvet in Post #25.