Grundproblemet: varje kommando har sin egen kodning
I Windows PowerShell 5.1 har nästan varje kommando sin egen standardkodning: Get-Content läser filer utan BOM som ANSI (Windows-1252), Out-File och > skriver UTF-16, Set-Content skriver ANSI och Export-Csv ASCII. PowerShell 7 har gjort detta enhetligt och använder UTF-8 utan BOM överallt.
Före
Användare;Avdelning;Kontor Åsa Lindström;Försäljning;Malmö Björn Öberg;Inköp;Västerås
Efter
Användare;Avdelning;Kontor Åsa Lindström;Försäljning;Malmö Björn Öberg;Inköp;Västerås
Läs och skriv filer rätt
Get-Content data.csv -Encoding UTF8läser UTF-8-filer rätt även utan BOM.Set-Content,Out-FileochAdd-Contentskriver UTF-8 med-Encoding UTF8– i 5.1 alltid med BOM.Export-Csv data.csv -Encoding UTF8 -NoTypeInformationi stället för ASCII-standarden, som ersätter åäö med?.- För alla kommandon på en gång:
$PSDefaultParameterValues['*:Encoding'] = 'utf8'överst i skriptet.
Webbanrop med Invoke-RestMethod och Invoke-WebRequest
Anger en server ingen teckenuppsättning i Content-Type avkodar Windows PowerShell 5.1 svaret som ISO-8859-1. UTF-8-svar innehåller då ä. Lösningen: hämta svaret som byte och avkoda det själv, till exempel med [Text.Encoding]::UTF8.GetString((Invoke-WebRequest $url).RawContentStream.ToArray()).
Skriptfiler med åäö
Sparar du ett skript som UTF-8 utan BOM läser Windows PowerShell 5.1 det som ANSI. Tecken i strängar som Write-Host "Smörgås" visas då som SmörgÃ¥s. Spara .ps1-filer som UTF-8 med BOM – i VS Code via kodningen i statusfältet, i Notepad++ via Encoding → UTF-8-BOM.
Konsolen
Visar bara konsolfönstret fel tecken som ├ñ i stället för ä är filen ofta hel – konsolen läser UTF-8 som DOS-teckentabellen 437. Byt utmatningen med [Console]::OutputEncoding = [Text.Encoding]::UTF8. För utdata du skickar till externa program, sätt även $OutputEncoding = [Text.Encoding]::UTF8.
Har filen redan skrivits trasig, släpp den i rutan ovan: Mojibuster lagar ä och liknande och konverterar ANSI-filer till UTF-8. Innehåller filen redan frågetecken är texten förlorad – se frågetecken i stället för åäö.
Vanliga frågor
Vilken PowerShell-version har jag?
$PSVersionTable.PSVersion visar den. 5.1 är Windows PowerShell som ingår i Windows; från 7 heter det bara PowerShell och använder UTF-8 som standard.
Varför öppnar Excel min CSV från PowerShell fel?
PowerShell 7 skriver UTF-8 utan BOM, vilket Excel inte känner igen. Använd -Encoding utf8BOM eller spara filen med BOM i Mojibuster. Mer under Excel visar konstiga tecken.
Behöver jag chcp 65001?
Bara för program som följer konsolens teckentabell. Inom PowerShell räcker [Console]::OutputEncoding.