wake-up-neo.net

Anzeigen von Unicode in PowerShell

Was ich versuche zu erreichen, ist ziemlich unkompliziert, obwohl Powershell es fast unmöglich macht.

Ich möchte den vollständigen Pfad von Dateien anzeigen, einige davon mit arabischen, chinesischen, japanischen und russischen Zeichen

Ich bekomme immer eine nicht-entschlüsselbare Ausgabe, wie die unten gezeigte  enter image description here

Die in Console angezeigte Ausgabe wird wie von einem anderen Skript verwendet. Die Ausgabe enthält ? anstelle der tatsächlichen Zeichen.

Der ausgeführte Befehl ist 

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

Gibt es eine einfache Möglichkeit, Powershell zu starten (über die Befehlszeile oder auf irgendeine Weise, die in ein Skript geschrieben werden kann), sodass die Ausgabe richtig angezeigt wird.

P.S. Ich habe viele ähnliche Fragen zu Stack Overflow durchgegangen, aber keine davon hat viel Einfluss, außer dass es ein Windows Console Subsystem-Problem ist.

13

Erarbeitete Alexander Martins Antwort . Zu Testzwecken habe ich einige Ordner und Dateien mit gültigen Namen aus verschiedenen Unicode-Unterbereichen wie folgt erstellt:

 valid names

Mit der Konsolenschriftart Courier New werden in einer PowerShell-Konsole beispielsweise Ersetzungssymbole anstelle von CJK-Zeichen angezeigt:

 Courier New

Andererseits werden mit SimSun console font (schlecht sichtbar) Ersetzungssymbole anstelle von arabischen und hebräischen Zeichen angezeigt, während CJK-Zeichen korrekt angezeigt werden:

 SimSun

Beachten Sie, dass alle Ersatzsymbole nur angezeigt sind, während echte Zeichen beibehalten werden, wie Sie in der folgenden Kopieren & Einfügenvon oben in der PowerShell-Konsole sehen können:

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›
☺☻♥♦

Der Vollständigkeit halber sind hier die entsprechenden Registrierungswerte für Weitere Schriftarten für die Windows-Eingabeaufforderung aktivieren (dies funktioniert auch für die Windows PowerShell-Konsole):

(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

Beispielausgabe:

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

Während ich dies zum zweiten Mal poste, ist die Powershell ISE eine Option zum Anzeigen von Fremdzeichen. Dies ist eine utf8-kodierte Datei:

PS C:\Users\js> get-content korean.txt

The Korean language (South Korean: 한국어/韓國語 Hangugeo; North 
Korean: 조선말/朝鮮말 Chosŏnmal) is an East Asian language
spoken by about 77 million people.[3]
0
js2010

Stellen Sie sicher, dass Sie über eine Schriftart verfügen, die alle problematischen Zeichen installiert und als Ihre Win32-Konsolenschriftart festgelegt hat. Wenn ich mich recht erinnere, klicken Sie auf das PowerShell-Symbol in der oberen linken Ecke des Fensters und wählen Sie Eigenschaften. Das resultierende Popup-Dialogfeld sollte eine Option zum Festlegen der verwendeten Schriftart haben. Möglicherweise muss es sich um eine Bitmap-Schriftart (.FON oder .FNT) handeln.

0