Главный вопрос, который у меня возникает, - как получить текстовый файл, который есть в Linux, для правильного отображения в PowerShell.
В Linux у меня есть текстовые файлы с некоторыми специальными символами, и фактически Блокнот отображает текстовый файл в точности так, как он отображается в Linux:
К сожалению, моя программа печатает на моем Linux терминале, и поэтому мне нужен такой же вывод на моем Windows терминале. В других ответах я видел, что
- Мне нужно использовать шрифт TrueType, поэтому я использую Lucidia Console
- на своем устройстве Linux, кодировка UTF-8. Согласно каждому ответу, который я могу найти в Интернете, CHCP 65001 переключает кодовую страницу в PowerShell на UTF-8
- Windows. Powershell лучше оснащен для отображения содержимого, поэтому, хотя я и пытался использовать командную строку, я теперь работает в PowerShell.
Используя CHCP 65001, а затем набрав
more my_file.txt
, вы увидите следующее:
при использовании
Get-Content -Encoding UTF8 my_file.txt
выходов:
Ни один из этих результатов не является достаточно хорошим, но я на самом деле обеспокоен что Get-Content здесь делает что-то другое. Код, который я передаю на windows, написан на бесплатном Pascal, а на бесплатном Pascal я могу предоставить кодовую страницу UTF-8, но это все. Таким образом, хотя Get-Content - хорошая команда для меня, чтобы проверить, способен ли PowerShell выдавать желаемый результат, я не могу использовать его. В Pascal вывод (который записывается на дисплей PowerShell) выглядит как:
Что также плохо, эти линии должны соединяться потому что они делают в Linux (и, очевидно, некоторые символы интерпретируются так же, как?). Однако это может быть проблемой с кодовой страницей, выбранной в Pascal, что будет следующим шагом.
Мой вопрос сейчас заключается в том, как мне получить Windows Powershell, чтобы по умолчанию отображать текстовый файл, как показано в версии блокнота. Для меня не практично везде запускать Get-Content в моем коде, поэтому, хотя этот результат выглядит более многообещающим, я не могу следовать этому.
В качестве дополнительного вопроса, поскольку я нигде не мог найти его в Интернете, каковы основные игроки здесь, когда дело доходит до отображения контента, потому что это явно большая история, чем просто кодирование. Почему команды «more» и «Get-Content» отображают разные результаты? И почему «Get-Content» не может прочитать весь контент? Я предполагал, что UTF-8 был универсальным стандартом, и программы, которые могут читать UTF-8, могли бы по крайней мере фактически прочитать все символы, но все они читают это по-разному.
В качестве текста введите:
╭─────╮
│ │
╭─│───╮ │
│ │ │ │
│ │ ╭─│───╮
│ │ │ │ │ │
╭─│───│─╯ │ │
│ │ │ │ │ │
│ │ ╰─╯ │ │
│ │ │ │
│ ╰───────│─╯
│ │
╰─────────╯
В ответ на ответ, опубликованный ниже, я вижу, что
more my_file.txt
производит
при использовании
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding =
New-Object System.Text.UTF8Encoding