SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen

    • Offizieller Beitrag

    Es kann sein, dass das Thema mit der neuesten Version von SciTE gar nicht mehr aktuell ist.
    Ich benutze noch die Version 3.4.4 - und in dieser ist keine Möglichkeit per Voreinstellung Dateien immer mit Kodierung "UTF8+BOM" zu erstellen.

    Das läßt sich mit einem Lua-Skript beheben.

    EDIT 2021-04-15

    Da ich nicht nur AutoIt-Skript in SciTE bearbeite/erstelle, fand ich es nun lästig immer das BOM, wenn nicht erforderlich, zu entfernen.

    Darum hier eine neue Version, die ausschliesslich au3-Dateien (Standard) und ggf. per Property festlegbare weiter Dateitypen mit dem BOM versieht.

    Falls ihr die "new_as_utf8bom.lua" in der SciTEStartup.lua eingetragen habt, einfach mit der "CheckBOM.lua" ersetzen.



    Als new_as_utf8bom.lua abspeichern und im Lua-Startup-Skript mit LoadLuaFile("new_as_utf8bom.lua", "..PFAD\\mit\\abschliessendem\\Doppelbackslash\\") eintragen.
    Nach Neustart von SciTE, wird jede neue Datei als UTF8+BOM kodiert.


    EDIT:
    Dasselbe Problem besteht bei Erstellen einer au3-Datei über das Kontextmenü des Explorers.
    Lösung
    - Editor (SciTE oder NPP) als Administrator starten
    - Datei öffnen: C:\Windows\ShellNew\Template.au3
    - Kodierung ändern zu "UTF-8 mit BOM"
    - Datei abspeichern (nochmal prüfen ob Kodierung auch übernommen wurde)

    Jetzt werden auch über das Kontextmenü erstellte Dateien in der UTF-8+BOM Kodierung erzeugt.


    EDIT2: PERSONAILISIERTES TEMPLATE
    Mit dem folgenden Skript wird die Template-Datei personalisiert erstellt.
    Die AutoItversion wird ausgelesen und im Template verwendet. (bisher fix)
    Der User-Name wird aus der Property "UDFCreator" ausgelesen. Ist dort kein Wert gesetzt, wird der PC-Username verwendet.
    Das Standard-Template wird dann überschrieben.

    Wer mag, kann natürlich den Inhalt des Templates noch weiter nach eigenem Geschmack gestalten.
    Dann einfach das Skript starten - fertig.


  • Hey vielen Dank @BugFix!
    Funktioniert und ist noch aktuell. Ich nutze Version 3.7.3.


    P.S.
    Weißt du vllt. auch eine Möglichkeit, wie man auch über "Explorer-Kontextmenü->Neu->AutoIt v3 Script" Dateien mit UTF8+BOM Kodierung erstellt.

    Grüße autoiter

    • Offizieller Beitrag

    Weißt du vllt. auch eine Möglichkeit, wie man auch über "Explorer-Kontextmenü->Neu->AutoIt v3 Script" Dateien mit UTF8+BOM Kodierung erstellt.

    Ich habe das bei mir gar nicht aktiviert. Schau mal bitte in der Registry, welches Skript dabei aufgerufen wird. Dann schaue ich mir das mal an.

  • Hmm, das kann ich gar nicht sagen.

    Bin ich richtig unter "Computer\HKEY_CLASSES_ROOT\.au3\SchellNew"? Da steht Filename Template.au3 :huh:

    Grüße autoiter

  • Wir sind doch alle faul, sonst wären wir nicht hier unterwegs. Daher habe ich das automatisiert. Das bedeutet natürlich neue Fehlerquellen und hat mich mehr Zeit gekostet als das normale ändern :D

    Edit: Einen Beitrag weiter gehen.

    Spoiler anzeigen

    Grüße autoiter

    Einmal editiert, zuletzt von autoiter (27. Mai 2017 um 07:06)

  • @autoiter
    Ich war so frei und habe ein paar Korrekturen/Änderungen an deinem Script vorgenommen... damit es auch bei mir läuft. ;)

    Einmal editiert, zuletzt von Bitnugger (27. Mai 2017 um 03:39)

  • Hallo @Bitnugger,
    ah, verstehe. Wenigstens habe ich nichts kaputt gemacht.
    Ich habe gestern beim Schreiben wirklich an dich gedacht und extra noch ein paar @error-Abfragen und eine Dateisicherung eingefügt. :D

    Grüße autoiter

  • Ja, in der Tat... eine gute Idee. :)

    _FileCreateTemplate()

    Hm, verstehe nur nicht so ganz, wieso du das Script beendest, wenn keine Template.au3 vorhanden ist? Bei diesem Funktionsnamen hätte ich angenommen, dass eine erstellt wird, falls nötig.

    Einmal editiert, zuletzt von Bitnugger (27. Mai 2017 um 23:55)

  • Wenn noch keines vorhanden ist, ist auch der Registry- Eintrag für Kontextmenü (neue au3-Datei) nicht vorhanden. Somit ist die Erstellung eines Templates funktionslos.

    Dann kann man den Registrierungsschlüssel doch hinzufügen...

    PersonalizeAU3Template.au3
  • BugFix 15. April 2021 um 13:53

    Hat den Titel des Themas von „SciTE - Neue Datei immer mit Kodierung "UTF-8 mit BOM" erstellen“ zu „SciTE - Neue AU3-Datei immer mit Kodierung "UTF-8 mit BOM" erstellen“ geändert.
    • Offizieller Beitrag

    Ich habe das so, dass ich die Standard Kodierung von SciTE nutze (passt für Lua) und nur Autoit bekommt eine Extrawurst. :P

    Aber ich hatte schon überlegt, für alle Kodierungen die Möglichkeit von Dateitypzuordnungen einzubauen. Werde ich dann noch erledigen.

    EDIT

    Mist, zu schnell geschossen: BOM ist die einzig existierende Kodierung, die man aus einer Datei auslesen kann (bei UTF16 noch LE und BE).

    Somit kann ich nicht feststellen, ob eine Datei UTF8 oder sonstwie kodiert ist.

    Die einzige Variante wäre zu sagen, dass alle Dateien, die nicht BOM bekommen sollen mit UTF8 kodiert werden. Da ich nicht feststellen kann, ob das bereits passiert ist (get encoding gibt es nicht), würde das bei jedem Speichern erneut gesetzt. - Das fände ich nicht sehr glücklich gelöst.

    • Offizieller Beitrag

    Schön... baue doch bitte noch eine zweite Property mit ein... für UTF8 ohne BOOM, das wäre dann z.B. für *.lua.

    Ich habe mal noch eine Alternative erstellt. Da SciTE in der Lage ist ein coding-cookie in den ersten 2 Zeilen zu erkennen, verwende ich das hierbei. Somit ist auch UTF8 ohne BOM sicher erkennbar.

    Dafür habe ich noch eine zusätzliche Property UTF8.Cookie.Line=. Braucht nur gesetzt werden, wenn das Cookie in die zweite Zeile soll ansonsten wird es standardmäßig in die erste Zeile geschrieben.

    Ich möchte aber gleich noch auf einen "Echo-Effekt" hinweisen. Ich verwende ja TimeStamp, der bei jedem Speichern gesetzt wird. Das beißt sich in dem Fall hiermit, wenn die erste Zeile gelöscht wird (Zeilenumbruch bleibt, Coding-Cookie steht in Zeile 2). Wenn jetzt automatisch der TimeStamp gesetzt wird, schiebt der den vorhandenen Inhalt eine Zeile weiter, somit steht das Cookie in Zeile #3 und ist ungültig - wird somit erneut gesetzt. Das ist aber ein absoluter Ausnahmefall. Ich werde mal die TimeStamp Funktion überarbeiten, dass sie das Cookie berücksichtigt, sofern vorhanden.

  • Der TimeStamp macht bei einigen Dateierweiterungen Probleme, wenn er in der ersten Zeile ist... z.B.: *.py

    Um in Python 2.x Source files utf-8 zu verwenden, genügt es folgenden Teil ganz oben in den Header der Datei zu platzieren:


    #!/usr/bin/env python 

    # -*- coding: utf-8 -*-

    Anschließend ist es möglich ganz normal utf-8 zu verwenden:

    test = 'äöüß'

    uu = test.decode('utf8')

    string = uu.encode('cp1250')

    print(string)

    Wichtig: Unter Python 3 ist dies nicht mehr erforderlich, da es dort das Standard Encoding ist.