- Offizieller Beitrag
Beim Ausgeben von Zeichen außerhalb des Standard-ASCII Satzes ärgert man sich ständig mit Codepages und Zeichensätzen herum.
Für nur AutoIt-Dateien ist das kein Problem. Einstellung in SciTE:
File encoding: UTF8BOM
code.page=65001
character.set=1000
output.code.page=0
Damit werden Umlaute sauber in die Konsole geschrieben.
Aus Lua-Dateien heraus sieht es dann anders aus.
File encoding: UTF8
code.page=65001
character.set=1000
output.code.page=0
Das führt dann z.B. bei print('Ä') zur Ausgabe in der Konsole: Ã.
Eine korrekte Ausgabe erfolgt mit:
output.code.page=65001
Alle Codepage-Werte sind für alle Dateien gültig und können somit nicht z.B. in der "au3.properties" unterschiedlich zur "lua.properties" gesetzt werden. Der zuletzt gelesene Wert wäre allgemeingültig.
Deshalb habe ich hierfür das Skript: SwitchOutputCodepage.lua erstellt.
Über Properties lässt sich für jeden Dateityp separat die erforderliche output.code.page festlegen. Wobei der Wert "0" (System) der Standardwert ist und somit nicht zwingend gesetzt werden muss.
output.cp.au3=0
output.cp.lua=65001
Das Skript selbst muss mit dem Lua-Programmstart-Skript geladen werden und prüft ob der aktuelle Wert der Output Codepage zur aktuellen Datei passt und wechselt diesen wenn nötig. Überprüft wird:
- beim Öffnen einer Datei
- nach dem Speichern einer Datei
- beim Wechseln auf eine andere Datei im Editor
-- TIME_STAMP 2021-04-30 10:20:21
-- coding:utf-8
--[[
In "SciTEUser.properties" set output.code.page for file types. If not set: "0" is default.
#~ used with file "SwitchOutputCodepage.lua"
output.cp.au3=0
output.cp.lua=65001
]]
SwitchCP = EventClass:new(Common)
local bDEBUG = false
SwitchCP.Switch = function(self, _file)
local cpOutput, ext = props['output.code.page'], props['FileExt']:lower()
local cpRequired = props['output.cp.'..ext]
if cpRequired == '' then cpRequired = '0' end
if cpOutput ~= cpRequired then
props['output.code.page'] = cpRequired
if bDEBUG then print(_file, 'output.code.page: '..cpOutput..' --> '..cpRequired) end
end
return nil
end
SwitchCP.OnOpen = function(self, _file)
return self:Switch(_file)
end
SwitchCP.OnSwitchFile = function(self, _file)
return self:Switch(_file)
end
SwitchCP.OnSave = function(self, _file)
return self:Switch(_file)
end
Alles anzeigen
EDIT
Wer mag, kann sich die aktuelle output.code.page auch in der Statusbar mit anzeigen lassen.
statusbar.text.1=Zei=$(LineNumber) | Sp=$(ColumnNumber) | Markiert: Zei=$(SelHeight) , Sp=$(SelLength) | Modus=$(OverType) | output.code.page=$(output.code.page)