web-dev-qa-db-fra.com

Afficher Unicode dans Powershell

Ce que j'essaie de réaliser est plutôt simple, bien que Powershell rend cela presque impossible.

Je souhaite afficher le chemin d'accès complet aux fichiers, dont certains contiennent des caractères arabes, chinois, japonais et russes.

Je reçois toujours des sorties indéchiffrables, comme celle ci-dessous  enter image description here

La sortie vue dans la console est utilisée telle quelle par un autre script ..__ La sortie contient ? au lieu des caractères réels.

La commande exécutée est 

(Get-ChildItem -Recurse -Path "D:\test" -Include *unicode* | Get-ChildItem -Recurse).FullName

Existe-t-il un moyen simple de lancer PowerShell (via une ligne de commande ou de toute autre manière pouvant être écrite dans un script) de sorte que la sortie soit correctement visualisée?.

P.S. J'ai parcouru de nombreuses questions similaires sur le dépassement de capacité, mais aucune d'entre elles n'a beaucoup à dire si elle appelle un problème de sous-système de la console Windows.

13
Dhiwakar Ravikumar

Elaborated La réponse d'Alexander Martin . À des fins de test, j'ai créé certains dossiers et fichiers avec noms valides à partir de différentes sous-plages Unicode, comme suit:

 valid names

Par exemple, avec la police Courier New console, les symboles de remplacement sont affichés à la place des caractères CJK dans une console PowerShell:

 Courier New

D'autre part, avec SimSun console, des symboles de remplacement (peu visibles) sont affichés à la place des caractères arabes et hébreux, tandis que les caractères CJK semblent être affichés correctement:

 SimSun

Veuillez noter que tous les symboles de remplacement sont simplement affichés, tandis que les caractères réels sont conservés, comme vous pouvez le voir dans la Copier et coller ci-dessus sur la console PowerShell:

PS D:\PShell> (Get-ChildItem 'D:\bat\UnASCII Names\' -Dir).Name
Arabic (عَرَبِيّ‎)
CJK (中文(繁體))
Czech (Čeština)
Greek (Γρεεκ)
Hebrew (עִבְרִית)
Japanese (日本語)
MathBoldScript (????????????????????????????????????????????????????????)
Russian (русский язык)
Türkçe (Türkiye)
‹angles›
☺☻♥♦

Par souci d'exhaustivité, voici les valeurs de registre appropriées pour Activer d'autres polices pour l'invite de commande Windows (cela fonctionne également pour la console Windows PowerShell):

(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont' |
    Select-Object -Property [0-9]* | Out-String).Split( 
        [System.Environment]::NewLine, 
        [System.StringSplitOptions]::RemoveEmptyEntries) | 
     Sort-Object

Exemple de sortie:

0       : Consolas
00      : Source Code Pro
000     : DejaVu Sans Mono
0000    : Courier New
00000   : Simplified Arabic Fixed
000000  : Unifont
0000000 : Lucida Console
932     : *MS ゴシック
936     : *新宋体
4
JosefZ

Assurez-vous qu'une police contenant tous les caractères problématiques est installée et définie comme police de la console Win32. Si je me souviens bien, cliquez sur l'icône PowerShell dans le coin supérieur gauche de la fenêtre et choisissez Propriétés. La boîte de dialogue contextuelle résultante doit avoir une option pour définir la police utilisée. Il se peut que ce soit une police bitmap (.FON ou .FNT).

0
Alexander Martin