Главный вопрос, который у меня есть, заключается в том, как я могу заставить текстовый файл, который у меня есть в Linux, правильно отображаться в PowerShell.
В Linux у меня есть текстовые файлы с некоторыми специальными символами, и на самом деле Блокнот отображает текстовый файл точно так же, как он отображается в Linux:
К сожалению, моя программа печатает на моем терминале Linux, и поэтому мне нужен такой же вывод в моем терминале Windows. Я видел другие ответы, которые
- Мне нужно использовать шрифт TrueType, поэтому я использую консоль Lucidia.
- на моем устройстве 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, написан на Free Pascal, а на Free 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
gc $file -Encoding UTF8
получает символы, которые были опубликованы в вашем сообщении. Я также вижу, что функция ReadAllText .net, опубликованная AdminOfThings, имеет тот же результат. Кажется, он правильно получает содержимое. - person shadow2020   schedule 17.03.2020