Rotproblemet: hver kommando har sin egen koding
I Windows PowerShell 5.1 har nesten hver kommando sin egen standardkoding: Get-Content leser filer uten BOM som ANSI (Windows-1252), Out-File og > skriver UTF-16, Set-Content skriver ANSI og Export-Csv ASCII. PowerShell 7 har gjort dette enhetlig og bruker UTF-8 uten BOM overalt.
Før
Bruker;Avdeling;Kontor Bjørn Æreberg;Salg;Ålesund Åse Haugerød;Innkjøp;Tromsø
Etter
Bruker;Avdeling;Kontor Bjørn Æreberg;Salg;Ålesund Åse Haugerød;Innkjøp;Tromsø
Les og skriv filer riktig
Get-Content data.csv -Encoding UTF8leser UTF-8-filer riktig, også uten BOM.Set-Content,Out-FileogAdd-Contentskriver UTF-8 med-Encoding UTF8– i 5.1 alltid med BOM.Export-Csv data.csv -Encoding UTF8 -NoTypeInformationi stedet for ASCII-standarden, som erstatter æøå med?.- For alle kommandoer på én gang:
$PSDefaultParameterValues['*:Encoding'] = 'utf8'øverst i skriptet.
Nettkall med Invoke-RestMethod og Invoke-WebRequest
Oppgir ikke serveren noe tegnsett i Content-Type, avkoder Windows PowerShell 5.1 svaret som ISO-8859-1. UTF-8-svar inneholder da ø. Løsningen: hent svaret som byte og avkod det selv, for eksempel med [Text.Encoding]::UTF8.GetString((Invoke-WebRequest $url).RawContentStream.ToArray()).
Skriptfiler med æøå
Lagrer du et skript som UTF-8 uten BOM, leser Windows PowerShell 5.1 det som ANSI. Tegn i strenger som Write-Host "Rødgrøt" vises da som Rødgrøt. Lagre .ps1-filer som UTF-8 med BOM – i VS Code via kodingen i statuslinjen, i Notepad++ via Encoding → UTF-8-BOM.
Konsollen
Viser bare konsollvinduet gale tegn som ├╕ i stedet for ø, er filen ofte i orden – konsollen leser UTF-8 som DOS-tegntabellen 437. Bytt utdataene med [Console]::OutputEncoding = [Text.Encoding]::UTF8. For utdata du sender videre til eksterne programmer, sett også $OutputEncoding = [Text.Encoding]::UTF8.
Er filen allerede skrevet ødelagt, slipper du den i feltet ovenfor: Mojibuster fikser ø og lignende og konverterer ANSI-filer til UTF-8. Inneholder filen allerede spørsmålstegn, er teksten tapt – se spørsmålstegn i stedet for bokstaver.
Ofte stilte spørsmål
Hvilken PowerShell-versjon har jeg?
$PSVersionTable.PSVersion viser den. 5.1 er Windows PowerShell som er innebygd i Windows; fra 7 heter den bare PowerShell og bruker UTF-8 som standard.
Hvorfor åpner Excel CSV-en min fra PowerShell feil?
PowerShell 7 skriver UTF-8 uten BOM, som Excel ikke gjenkjenner. Bruk -Encoding utf8BOM, eller lagre filen med BOM i Mojibuster. Mer under Excel viser rare tegn.
Trenger jeg chcp 65001?
Bare for programmer som følger konsollens tegntabell. Innenfor PowerShell holder [Console]::OutputEncoding.