FileOpen in ANSI
-
Saft -
13. Juli 2017 um 12:00 -
Erledigt
-
-
Liegt es daran, dass du keine ANSI exklusiven Zeichen verwendest und Notepad++ deswegen keine Differenzierung zwischen UTF-8 und ANSI vornimmt?
Wenn bei beiden dasselbe rauskommt ist es ja egal welche Kodierung du verwendest.UTF-8 übernimmt ja, soweit ich weiß, die ANSI Tabelle und erweitert sie mit weiteren Zeichen.
-
(Edit: @alpines war schon da und meine Vermutung war falsch, deswegen weg damit )
-
Woher soll Notepad++ denn wissen dass es eine ANSI-Kodierung werden soll?
Es ist eine leere Datei.
Da es kein BOM oder ähnliches gibt kann Notepad++ auch nicht ermitteln welche Kodierung es werden soll.
Erst wenn in der Datei etwas drin steht von dem es Notepad++ auch ableiten kann wird es von Notepad++ erkannt.
Aber einer leeren Datei kann man ohne BOM nicht ansehen welche Kodierung für diese vorgesehen ist.UTF-8 übernimmt ja, soweit ich weiß, die ANSI Tabelle und erweitert sie mit weiteren Zeichen.
Fast - es ist die ASCII-Tabelle. Da ja nur 7 Bit für die Zeichen verwendet werden. Das 8. Bit wird verwendet wenn das Zeichen doch in einem höheren Bereich liegt und ein weiteres Byte für dieses verwendet werden muss.
-
- Offizieller Beitrag
Was sagt denn FileGetEncoding?
-
Aber einer leeren Datei kann man ohne BOM nicht ansehen welche Kodierung für diese vorgesehen ist.
Wenn du mit den Flags schreibst die der TE gepostet hat, dann öffnet Npp die Datei immer noch mit UTF-8.
Was sagt denn FileGetEncoding?
Liefert 256 = UTF-8 ohne BOM auch wenn man in die Datei schreibt.
-
Wenn du mit den Flags schreibst die der TE gepostet hat, dann öffnet Npp die Datei immer noch mit UTF-8.
Und die Begründung hierzu habe ich genannt. Es ist ein Fallback da Notepad++ keine Chance hat zu erkennen dass es eine ANSI-kodierte Datei werden soll.
Ein Kodierung ist kein Attribut einer Datei (außer wenn es ein BOM hat) - genau das bringt uns ja erst diese schönen verhunzten Sonderzeichen.
Auf welche Kodierung Notepad++ in diesem Falle zurückspringen soll kann man in den Optionen unter "Neue Dateien" - "Kodierung" einstellen.Füll die Datei mit Text (der auch Zeichen > ASCI enthält) und Notepad++ sollte die Kodierung korrekt erkennen:
AutoIt
Alles anzeigen$s_FileName = @ScriptDir&"\ansi.csv" $h_File = FileOpen($s_FileName, 2 + 512) ConsoleWrite("Erkannte Kodierung wenn die Datei leer ist: " & FileGetEncoding($s_FileName) & @CRLF) For $i = 50 To 125 FileWrite($h_File, ChrW($i)) Next ConsoleWrite("Erkannte Kodierung wenn nur ASCII-Zeichen vorkommen: " & FileGetEncoding($s_FileName) & @CRLF) For $i = 128 To 130 FileWrite($h_File, ChrW($i)) Next FileClose($h_File) ConsoleWrite("Erkannte Kodierung wenn auch Zeichen > ASCII vorkommen: " & FileGetEncoding($s_FileName) & @CRLF)
-
- Offizieller Beitrag
Liefert 256 = UTF-8 ohne BOM auch wenn man in die Datei schreibt.
Besitzt Du seine Datei?
Er hat doch seine Datei zum lesen geöffnet, deswegen gehe ich davon aus, dass da auch etwas drin steht.
Und deswegen mein Hinweis, vorher erstmal schauen was FileGetEncoding sagt. -
Besitzt Du seine Datei?
ich habe die eigentlich einfache Aufgabenstellung eine Textdatei in ANSI zu erstellen.
Mit diesem Code versuche ich es, aber es ist laut Notepad++ immer eine UTF-8 Datei.Deine Frage erübrigt sich doch wenn er sie selber erstellen will?
Du kannst mit den Flags auch schreiben, da 1 append ist und bei einer neuen Datei (er will ja eine erstellen) Schreibrechte gewährt. -
Das ging ja fix mit Antworten. Leider habe ich keine wirkliche Ahnung von Zeichensätzen.
Ich hatte es gar nicht erwähnt, es geht um die ganzen Umlaute wie ä ö ü etc.FileGetEncoding liefert 512. Ist es dann nur ein Anzeige-Problem von Notepad++?
Ich prüfe es nochmal . Vielen Dank schon mal.Edit:
Das war leider doch nicht der Fall. Kann es mit den Daten zusammenhängen, die ich mit FileWrite in die Datei schreibe? -
Wahrscheinlich liegt es daran, dass Notepad++ das bei einer leeren Datei nicht festlegen kann, wie gesagt.
-
FileGetEncoding liefert 512. Ist es dann nur ein Anzeige-Problem von Notepad++?
[...]
Das war leider doch nicht der Fall. Kann es mit den Daten zusammenhängen, die ich mit FileWrite in die Datei schreibe?Ja dem Algorithmus von Notepad++ zur Erkennung der Kodierung reicht es offensichtlich nicht anhand der Bytefolgen die äöü erzeugen auf ANSI zu schließen. Fügt man hingegen z.B. noch ein €-Zeichen hinzu dann geht auch Notepad++ zu Recht davon aus, dass es sich um Daten in ANSI-Kodierung handelt.
Aber unabhängig davon was Notepad++ anzeigt ist von deiner Seite her erst einmal alles richtig. Die Daten die du schreiben willst schreibst du auf diese Art in ANSI-Kodierung (natürlich nur wenn du im FileWrite das Handle statt dem Dateinamen verwendest).
-
Ich habe die Lösung scheinbar gefunden.
Zusätzlich zur "falschen" Anzeige in Notepad++ muss ich den Text noch mit StringToBinary($String) konvertieren, bevor ich ihn in die Datei schreibe.
Der Fehler lag scheinbar an meinen Quelldaten.Vielen Dank für eure Unterstützung.
-
Warum denn StringToBinary?
Du öffnest die Datei als Textdatei.
In dem Fall wird dein String in AutoIt in den Variant-Typ "Binary" konvertiert und da wir die Datei als Textdatei geöffnet haben vor dem FileWrite implizit wieder in einen String konvertiert. Im Grunde also ein unnötiger Zwischenschritt.
Das ist das selbe als würdest du die Datei zum Schreiben mit Binary öffnen und den String per StringToBinary (mit dem zweiten Parameter) explizit als ANSI kodieren.
Das Ergebnis wäre schlicht das selbe.Mach einfach mal einen kleines Minimalbeispiel wie du die Daten bekommst und in die Datei schreibst.
Dann können wir dir sagen ob es sich um ein Problem deines Codes oder der Erkennung von Notepad++ handelt.