Menu

Read file encoding using python script

Help
mrpaul1
2010-12-14
2018-10-09
<< < 1 2 3 > >> (Page 2 of 3)
  • CFrank

    CFrank - 2016-02-21

    Hallo Andre,

    schön das du es geschafft hast. Wegen dem UTF-8, dass ist nicht gut übersetzt.

    Im English gibt es

    Encode UTF-8 (das ist ohne Bytereihenfolge-Markierung)
    Encode UTF-8-BOM (das mit)

    im Deutsch gibt es

    UTF-8 ohne BOM
    UTF-8

    besser wäre gewesen

    UTF-8
    UTF-8 mit BOM

    dann wäre es mit dem English gleich.

    Aber was soll das mit der Zeile

    editor.replace('iso-8859-1', 'UTF-8')
    

    zu tun haben? Hier wird eine Zeichenkette mit einer anderen ersetzt.
    Das hat nichts mit der Kodierung von npp Dokumenten zu tun,
    sondern ist eine Anweisung an den Browser das der Text UTF-8 kodiert ist.

    Soll das nun heissen, das du folgende Zeile im html Dokument hast

    http-equiv="content-type" content="text/html; charset=UTF-8 ohne BOM"

    ??

    Wenn ja, wage ich zu zweifeln das das richtig ist. Dies ist kein von der IANA akzeptiertes
    Kürzel. Siehe hier http://www.iana.org/assignments/character-sets/character-sets.xhtml
    Wegen der Probleme mit BOM und Webseiten siehe hier https://www.w3.org/International/questions/qa-byte-order-mark#problems (Deutsch ;-)

    Gruß
    Claudia

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-02-23

    Hallo Claudia,
    nein, es steht im Code

    http-equiv="content-type" content="text/html; charset=UTF-8"
    

    Wenn ich "ohne Bom" weglasse, werden die Sonderzeichen falsch ausgegeben.

    Gruss André

     
  • CFrank

    CFrank - 2016-02-23

    Hallo Andre,

    du meinst hier hast Du ohne BOM eingegeben

    notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
    

    und nicht hier

    editor.replace('iso-8859-1', 'UTF-8 ohne BOM')
    

    ??

    Das würde richtig sein wegen der unterschiedlichen Übersetzung.

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-02-24

    Hallo Claudia,
    so sieht der Eintrag aus

                notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                editor.replace('iso-8859-1', 'UTF-8')
    

    Gruss André

     

    Last edit: André Lieske 2016-02-24
  • CFrank

    CFrank - 2016-02-24

    Hallo Andre,

    ja, das macht Sinn.

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-03-05

    Hallo Claudia,
    ich habe das Problem das die Sonderzeichen falsch ausgegeben werden.
    Wenn ich über meinem Shop eine Bestellung aufgebe, wird die Bestellung
    an mich und an den Kunden mit falschen Sonderzeichen ausgegeben.

    Die betreffenden Dateien befinden sich in einem Verzeichnis "Broker" auf meinem Server,
    diese sind sehr lang um sie hier zu posten.
    Wie ich in den Scripten gesehen habe, sind diese teilweise von "sourceforge.net" programmiert worden.

    Wenn Du mir helfen könntest würde mich das sehr freuen,
    könnte Dir die Zugangsdaten für einen passwortgeschützten Testshop zukommem lassen,
    möchte die Daten aber nicht hier posten, kann ich Dich auch per Mail erreichen?

    Besten Dank im voraus
    Gruss André

     
  • CFrank

    CFrank - 2016-03-05

    Andre, bei einem konkreten Problem zu helfen ist eine Seite aber das was du wunscht
    ist anders. Bei einem Webshop sind wahrscheinlich nicht nur html/php/python Seiten da,
    da gibt es bestimmt auch noch database und email oder? Auch diese Komponenten müssen
    utf-8 können beziehungsweise in der database muß auch der standard text encoding utf-8 sein.
    Das soll heißen, um das alles richtig zu machen muß Zeit genommen werden und alles muß auf
    einander abgestimmt sein. Tut mir leid.

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-03-06

    Hallo Claudia,
    danke für das Feedback.
    Es handelt sich um einen statisches Shopsystem, dieser wird Lokal erstellt
    und anschließend per FTP veröffentlicht, es gibt keine Datenbank

    Gruss André

     
  • André Lieske

    André Lieske - 2016-03-12

    Hallo Claudia,
    habe den Fehler gefunden,
    ich darf die Broker-Dateien durch das Script nicht verändern.
    Wie kann ich verhindern das, dass Verzeichnis "broker" geändert wird?

    import os;
    import sys;
    ###################################################################
    # Pfad zum Stage-Ordner von SmartStore                            #
    # Pfad bitte anpassen!                                            #
    # Die doppelten Backslashes ( \\ ) im Pfad muessen vorhanden sein #
    ###################################################################
    
    filePathSrc="C:\\Users\\Andre\\Documents\\SmartStore.biz Projekte\\SM6\\Lieske Andre\\Stage\\" 
    
    
    ###############################
    # AB HIER NICHTS MEHR AENDERN #
    ###############################
    
    for root, dirs, files in os.walk(filePathSrc):
        for fn in files:
            if fn[-4:] == '.php': 
                notepad.open(root + "\\" + fn)
                notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                editor.replace('iso-8859-1', 'UTF-8')
    #            editor.replace("<!DOCTYPE html>", r"<?php header\('Content-Type: text/html;charset=UTF-8'\);?><!DOCTYPE html>")
                notepad.save()
                notepad.close() 
    

    Besten Dank im voraus
    Gruss André

     

    Last edit: André Lieske 2016-03-12
  • CFrank

    CFrank - 2016-03-14

    Hallo André,
    du kannst root überprüfen. Wenn Dateien in Broker und alle Subverzeichnisse von Broker nicht verändert werden dürfen dann kannst du so was machen

    for root, dirs, files in os.walk(filePathSrc):
        if root.startswith('BROKER_PATH'):
            pass
        else:
            for fn in files:
                ...
    

    wenn nur Dateien in Broker verzeichnis nicht verändert werden dürfen, dann

    for root, dirs, files in os.walk(filePathSrc):
        if root == 'BROKER_PATH':
            pass
        else:
            for fn in files:
                ...
    

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-03-14

    Hallo Claudia,
    das Script will nicht laufen.
    In Broker sind Verzeichnisse vorhanden, also habe ich Version 1 genommen.
    Muss ich noch was in "if root" angeben?
    Habe es mit vollständigen Pfad und nur "broker" versucht, funktioniert auch nicht.

    Besten Dank im voraus
    Gruss André

     

    Last edit: André Lieske 2016-03-14
  • CFrank

    CFrank - 2016-03-14

    Hallo André,

    was gibt es für eine Fehlermeldung in der Console?

    Wenn Lösung 1, dann muss BROKER_PATH etwas wie
    C:\wwwroot\project\broker sein, und dann würden alle Verzeichnisse
    die so anfangen ignoriert werden.

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-03-14

    Hallo Claudia,
    eine Fehlermeldung gibt es leider nicht.

    import os;
    import sys;
    ###################################################################
    # Pfad zum Stage-Ordner von SmartStore                            #
    # Pfad bitte anpassen!                                            #
    # Die doppelten Backslashes ( \\ ) im Pfad muessen vorhanden sein #
    ###################################################################
    
    filePathSrc="C:\\Users\\Andre\\Documents\\SmartStore.biz Projekte\\SM6\\Lieske Andre\\Stage\\" 
    
    
    ###############################
    # AB HIER NICHTS MEHR AENDERN #
    ###############################
    
    for root, dirs, files in os.walk(filePathSrc):
    if root == 'C:\Users\Andre\Documents\SmartStore.biz Projekte\SM6\Lieske Andre\Stage\broker':
            pass
        else:
        for fn in files:
            if fn[-4:] == '.php': 
                notepad.open(root + "\\" + fn)
                notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                editor.replace('iso-8859-1', 'UTF-8')
                notepad.save()
                notepad.close()   
    

    Besten Dank im voraus
    Gruss André

     
  • CFrank

    CFrank - 2016-03-14

    Hallo André,
    du hast die console nicht geöffnet, dort würde auf jeden Fall eine Fehler erscheinen,
    da das else nicht auf der gleichen ebene wie das if steht und if muss eingerückt zu for stehen. IndentError.

    for root, dirs, files in os.walk(filePathSrc):
        if root == 'C:\Users\Andre\Documents\SmartStore.biz Projekte\SM6\Lieske Andre\Stage\broker':
            pass
        else:
            for fn in files:
                if fn[-4:] == '.php': 
                    notepad.open(root + "\\" + fn)
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                    editor.replace('iso-8859-1', 'UTF-8')
                    notepad.save()
                    notepad.close()  
    

    Bei dieser Lösung werden die Subverzeichnisse aber nicht ignoriert!!
    Nur Dateien im angegeben Verzeichnis werden ignoriert.

    Gruß
    Claudia

     

    Last edit: CFrank 2016-03-14
  • André Lieske

    André Lieske - 2016-03-14

    Hallo Claudia,
    wie kann ich die Console aktivieren, suche mir einen Wolf.
    Simmt, war der falsche Code.
    Funtioniert einfach nicht.

    for root, dirs, files in os.walk(filePathSrc):
        if root.startswith('C:\Users\Andre\Documents\SmartStore.biz Projekte\SM6\Lieske Andre\Stage\broker'):
            pass
        else:
        for fn in files:
            if fn[-4:] == '.php': 
                notepad.open(root + "\\" + fn)
                notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                editor.replace('iso-8859-1', 'UTF-8')
                notepad.save()
                notepad.close()     
    

    Gruss André

     
  • CFrank

    CFrank - 2016-03-14

    Plugins->Python Script->Show Console
    Wenn du deinen Code mit meinem vergleichst, gibt es wegen dem einrücken immer noch
    ein Problem. Du bist nicht André, oder?

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-03-14

    Hallo Claudia,
    wie kommst du darauf das ich nicht André bin?
    Bin es seit meiner Geburt.

    Wäre nich darauf gekommen, das die Position der Zeilen eine Rolle spielt.
    Script läuft die Dateien durch, das Verzeichnis einschl. Unterordner werden trotzdem geändert.

    Die Fehlermeldung

    IndentationError: expected an indented block
      File "C:\Users\Andre\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\Convert Stage SHOP.py", line 23
        notepad.open(root + "\\" + fn)
              ^
    IndentationError: expected an indented block
    

    Gruss André

     

    Last edit: André Lieske 2016-03-14
  • André Lieske

    André Lieske - 2016-03-14

    Hallo Claudia,
    es fehlten die doppelten Backslash im Pfad,
    es funktioniert.
    Besten Dank
    Gruss Andrè

     

    Last edit: André Lieske 2016-03-14
  • André Lieske

    André Lieske - 2016-03-14

    Hallo Claudia,
    habe in einem Unterverzeichnis "js" Dateien liegen die auf ".js" enden.
    bisher sah der Code so aus;

    for root, dirs, files in os.walk(filePathSrc):
        if root.startswith('C:\\Users\\Andre\\Documents\\SmartStore.biz Projekte\\SM6\Lieske Andre\\Stage\\broker'):
            pass
        else:
            for fn in files:
                if fn[-4:] == '.php': 
                    notepad.open(root + "\\" + fn)
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                    editor.replace('iso-8859-1', 'UTF-8')
                    notepad.save()
                    notepad.close() 
    
    
                if fn[-3:] == '.js': 
                    notepad.open(root + "\\" + fn)
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                    notepad.save()
                    notepad.close() 
    

    habe es so versucht, die "js" Dateien werden aber nicht geändert.

    for root, dirs, files in os.walk(filePathSrc):
        if root.startswith('C:\\Users\\Andre\\Documents\\SmartStore.biz Projekte\\SM6\Lieske Andre\\Stage\\broker'):
            pass
        else:
            for fn in files:
                if fn[-4:] == '.php' and fn[-3:] == '.js': 
                    notepad.open(root + "\\" + fn)
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu ANSI")
                    notepad.runMenuCommand("Kodierung", "Konvertiere zu UTF-8 ohne BOM")
                    editor.replace('iso-8859-1', 'UTF-8')
                    notepad.save()
                    notepad.close()
    

    Wollte damit verhindern das alle Dateien 2X durchlaufen werden.

    Besten Dank im voraus
    Gruss André

     
  • CFrank

    CFrank - 2016-03-14

    Hallo André,

    guter Gedanke aber kann eine Datei .php UND .js extension haben?

    if fn[-4:] == '.php' and fn[-3:] == '.js':
    

    Oder kann eine Datei .php ODER .js haben? ;-)

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-03-14

    Hallo Claudia.
    versteh ich nicht,
    if fn[-4:] == '.php' sagt doch aus das alle Dateien mit Endung PHP von ansi in utf kodiert werden sollen,
    das gleiche gilt für Dateien mit Endung js

    Hab ich das was falsch verstanden?

    Besten Dank im voraus
    Gruss André

     
  • CFrank

    CFrank - 2016-03-14

    Hallo André,
    ja, aber was macht die if Frage?

    Übersetzt: Wenn von der Datei die letzte 4 Zeichen gleich .php sind UND
    wenn von der Datei die letzte 3 Zeichen .js sind dann führe die anderen Commands aus.

    Du willst doch aber sagen:
    Wenn von der Datei die letzte 4 Zeichen gleich .php sind ODER
    wenn von der Datei die letzte 3 Zeichen .js sind dann führe die anderen Commands aus.

    also

    if fn[-4:] == '.php' or fn[-3:] == '.js':
    

    Gruß
    Claudia

     
  • André Lieske

    André Lieske - 2016-03-15

    Hallo Claudia,
    hatte es nit "||" versucht, an "or" hatte ich nicht gedacht.

    Kann ich das Script auch serverseitig über NppFTP ausführen lassen?

    Wo kann ich im Forum einstellen, das ich bei einem neuen Posting per Mail benachrichtigt werde?

    Besten Dank im voarus
    Gruss André

    Ps. Wie bist du darauf gekommen, das ich nicht der bin für den ich mich ausgebe?

     
  • Dave Brotherstone

    Ich glaube ich muss hier eingreifen.

    Ich habe diese Thread verfolgt, und der herrvoragend Support von Claudia gelesen.

    Am 17. Februar, schreibte Claudia:

    welcher Fehler kommt?
    Öffne die python console (Plugins->PythonScript->Show Console) und gib die
    Anweisung direkt ein. Funktioniert das?

    Dann, kurz danach schreibte André:

    habe ich gemacht, es kommt keine Fehlermeldung

    > Python 2.7.6-notepad++ r2 (default, Apr 21 2014, 19:26:54) [MSC v.1600 32 bit (Intel)]
    > Initialisation took 47ms
    > Ready.
    

    Dann jetzt, plotzlich, von André:

    wie kann ich die Console aktivieren, suche mir einen Wolf.

    Auch am 17. Feb, von Claudia:

    dann vermute ich, das du einen Mix aus Tab und Spaces hast, das ist nicht erlaubt.
    Aktiviere "zeige alle Symbole", das umgedrehte P, dann solltest du sehen ob du
    Tabs hast. Wenn alles Space ist, dann stimmt nicht ganz die Anzahl z. b. die Zeile
    davor hat 8 Spaces die nächste nur 7 oder so.

    Und das hat natürlich geklappt. Jetzt plotzlich von André:

    Wäre nich darauf gekommen, das die Position der Zeilen eine Rolle spielt.

    Ich weiß nicht was geschehen ist, aber hier stimmt was nicht.

    Dann lese ich:

    if fn[-4:] == '.php' and fn[-3:] == '.js':
    

    Und die Antwort von Claudia, dass das ein or sein soll.

    Dann:

    hatte es nit "||" versucht, an "or" hatte ich nicht gedacht.

    Das klingt wie ein Troll. Ich glaube nicht, dass jemand eine Sprache erwartet, der nutzt and und || (und nicht an or denkt).

    Von daher, meine Vermutung ist, dass diese Konto ist jetzt von ein Troll übernommen, und bitten das jetzt aufzuhören.

    Falls du kein Troll bist, und doch noch "der ursprünglicher" André bist, dann bitte alle Nachrichten noch mal lesen. Die Support die du hier bekommen hast, ist sehr außergewohnlich, und eigentlich deutlich mehr als man erwarten soll, und du solltest sehr dankbar dafür sein.

    Claudia, vielen herzlichen Dank für deine herrvoragend Unterstützung. Diese Community profitiert sehr von deine Kenntnisse, und die Art und Weise wie du alles erklärst. Vielen Dank!

    Viele Grüße
    Dave

     
    • CFrank

      CFrank - 2016-03-15

      Hi Dave,

      thank you for your kind words. Supporting your plugin is the minimum I can do as
      it is a big help for my daily work.

      Thank you
      Claudia

       
<< < 1 2 3 > >> (Page 2 of 3)

Log in to post a comment.

MongoDB Logo MongoDB