Powershell und Umlaute
-
Moin,
ich habe ein Problem mit Powershell. Und zwar kommt bei folgendem Beospiel Zeichensalat raus.$var = "öäü" Write-Host $var
Also stimmt irgendwo was mit dem Encoding wohl nicht. Was könnte das sein?
-
Kann ich offensichtlich nicht nachvollziehen, da bei mir das Encoding stimmt, aber fangen wir doch mal an, mögliche Fehlerquellen zu suchen:
- Wenn du links oben auf das Icon von dem Terminalfenster klickst, kannst du die Einstellungen zur Codepage sehen. Was steht da?
- Ist das ein Script, das du mit einem Editor (welchem?) geschrieben hast, oder ist das mit Tastatur in das Terminalfenster getippt?
[Console]::InputEncoding
?[Console]::OutputEncoding
?
-
Funktioniert bei mir (Windows 11), lass dir mal mit
chcp
das aktuelle Encoding ausgeben.
-
@DocShoe sagte in Powershell und Umlaute:
Funktioniert bei mir (Windows 11), lass dir mal mit
chcp
das aktuelle Encoding ausgeben.Da kommt 850.
-
@SeppJ sagte in Powershell und Umlaute:
Kann ich offensichtlich nicht nachvollziehen, da bei mir das Encoding stimmt, aber fangen wir doch mal an, mögliche Fehlerquellen zu suchen:
- Wenn du links oben auf das Icon von dem Terminalfenster klickst, kannst du die Einstellungen zur Codepage sehen. Was steht da?
- Ist das ein Script, das du mit einem Editor (welchem?) geschrieben hast, oder ist das mit Tastatur in das Terminalfenster getippt?
[Console]::InputEncoding
?[Console]::OutputEncoding
?
Ja ist ist ein Script mit Neovim (Windows version) geschrieben. Codepage ist 850.
-
@Tyrdal sagte in Powershell und Umlaute:
@SeppJ sagte in Powershell und Umlaute:
Kann ich offensichtlich nicht nachvollziehen, da bei mir das Encoding stimmt, aber fangen wir doch mal an, mögliche Fehlerquellen zu suchen:
- Wenn du links oben auf das Icon von dem Terminalfenster klickst, kannst du die Einstellungen zur Codepage sehen. Was steht da?
- Ist das ein Script, das du mit einem Editor (welchem?) geschrieben hast, oder ist das mit Tastatur in das Terminalfenster getippt?
[Console]::InputEncoding
?[Console]::OutputEncoding
?
Ja ist ist ein Script mit Neovim (Windows version) geschrieben. Codepage ist 850.
Welches encoding verwendet Neovim? AFAIK sollte es zu mindestens utf-8 sein damit die powershell hier keine Konvertierung zwischen ANSI codepage und unicode durchführen muss.
Eventuell muss der script code sogar in UTF-16 kodiert sein (UTF-16 ist das was Windows intern als Unicode Kodierung nutzt für ihre Unicode API)Laut diesem stackoverflow post muss es wohl utf-8 with bom (Byte Order Mark) sein damit die powershell die korrekte enconding erkennt.
https://stackoverflow.com/questions/14482253/utf8-script-in-powershell-outputs-incorrect-charactersWobei das wohl nur für Powershell 5.1 und älter gilt. Mit PS 7.4 und neuer kann es auch UTF-8 ohne bom sein.
Ansonsten kann es noch sein, wie auch andere schon geschrieben haben, dass man das OutputEncoding auf UTF-8 einstellen muss.
Aber wie das genau geht ist abhängig welche powershell version du nutzt.
Mit PS 7.4 ist es $OutputEncoding = [System.Text.Encoding]::UTF8
Mit älteren Versionen ist es eher folgende zeile
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
-
Vor allem muss das Script ein entsprechendes BOM haben, egal welche utf Codierung genutzt wird.
-
@SeppJ sagte in Powershell und Umlaute:
Vor allem muss das Script ein entsprechendes BOM haben, egal welche utf Codierung genutzt wird.
Das stimmt nicht mehr ganz. Seit PS 7.4 soll es auch ohne bom UTF-8 richtig erkennen.
Edit:
Laut MS selbst ist es sogar schon seit PS 6 UTF-8 ohne BOM default:
https://learn.microsoft.com/en-us/powershell/scripting/dev-cross-plat/vscode/understanding-file-encoding?view=powershell-7.4&viewFallbackFrom=powershell-7.3Configuring PowerShell PowerShell's default encoding varies depending on version: In PowerShell 6+, the default encoding is UTF-8 without BOM on all platforms.
-
@firefly sagte in Powershell und Umlaute:
Welches encoding verwendet Neovim?
utf-8
Laut diesem stackoverflow post muss es wohl utf-8 with bom (Byte Order Mark) sein damit die powershell die korrekte enconding erkennt.
https://stackoverflow.com/questions/14482253/utf8-script-in-powershell-outputs-incorrect-charactersIch schätz mal Neovim macht das ohne BOM, weil das unter Linux so üblich ist (und ne BOM in UTF8 auch eigentlich sinnlos).
Wobei das wohl nur für Powershell 5.1 und älter gilt. Mit PS 7.4 und neuer kann es auch UTF-8 ohne bom sein.
Ansonsten kann es noch sein, wie auch andere schon geschrieben haben, dass man das OutputEncoding auf UTF-8 einstellen muss.
Das probier ich nachher mal.
-
Ich hab jetzt chcp 65001 ins profile gepackt und nun funktionierts.