web-dev-qa-db-fra.com

Le script UTF8 dans PowerShell génère des caractères incorrects

J'ai créé un script UTF8 pour PowerShell avec des caractères non ASCII. 

caractères.ps1:

Write-Host "ç â ã á à"

Lorsque le script est exécuté dans la console PowerShell, il génère des caractères incorrects.

enter image description here

Cependant, si j'écris les caractères directement dans la console, ils sont affichés comme prévu:

enter image description here

Est-ce que quelqu'un sait ce qui cause ce comportement?

Le problème est né d’un script que j’ai écrit et qui contient des chemins codés en dur qui incluent des caractères non-ASCII. Lorsque j'essaie de passer le chemin en argument aux applets de commande (dans le cas où j'allais robocopy un dossier), la commande échoue car elle ne peut pas trouver le chemin (qui est mal affiché à l'écran).

22
Arthur Nunes

Changer le codage du script en UTF-8 avec BOM a résolu le problème.

J'utilisais SublimeText avec le plugin EncodingHelper pour contrôler le jeu de caractères du script. Il a été réglé correctement sur UTF8. 

J'ai changé l'encodage du script dans SublimeText en "UTF-8 avec BOM" et la sortie a été affichée correctement.

J'ai créé le même script avec Notepad ++, dont la valeur par défaut est "UTF-8 avec BOM", et la chaîne a été affichée correctement dans la console.

J'ai changé l'encodage du script dans Notepad ++ en "UTF-8 sans BOM" et cela ne s'affichait pas correctement.

Il semble que PowerShell ne puisse pas deviner correctement le codage des fichiers UTF-8 sans nomenclature.

55
Arthur Nunes

Dans mon cas, le problème était dû à la création d'un nouveau script PowerShell avec Visual Studio Code, qui utilise le codage par défaut UTF-8. Définissez le codage sur "Windows 1252" pour résoudre le problème.

Il semble que PowerShell ne puisse pas gérer UTF-8, il a besoin du codage "Windows 1252".

5
beniwa

Il existe un moyen fiable de détecter utf8nobom ( https://unicodebook.readthedocs.io/guess_encoding.html ). Comme beaucoup d'autres petites choses, cela semble mieux fonctionner dans PS 6. Même mon bien-aimé emacs 25 pour Windows obtient un mauvais encodage. 

PS C:\users\admin> pwsh
PowerShell 6.1.0
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/pscore6-docs
Type 'help' to get help.

PS C:\users\admin> "write-Host 'ç â ã á à'" | set-content -Encoding utf8NoBOM accent.ps1
PS C:\users\admin> .\accent
ç â ã á à
0
js2010