Linux和Windows之间的文本编码

问题描述 投票:0回答:1

我的主要问题是如何获取Linux中的文本文件以在PowerShell中正确显示。

在Linux中,我的文本文件带有一些特殊字符,实际上记事本显示的文本文件与Linux中显示的完全相同:

Notepad output

不幸的是,我的程序会打印到Linux终端,因此我的Windows终端需要相同的输出。我通过其他答案已经看到

  1. 我需要使用TrueType字体,所以我正在使用Lucidia Console
  2. 在我的Linux设备上,编码为UTF-8。根据我在网上可以找到的每个答案,CHCP 65001将PowerShell中的代码页切换为UTF-8
  3. Windows Powershell可以更好地显示内容,因此尽管我尝试使用命令提示符,但现在在PowerShell中工作。

使用CHCP 65001,然后键入

more my_file.txt

显示此:

result from more command

使用时

Get-Content -Encoding UTF8 my_file.txt

输出:

result from get-content

这些结果都不够好,但是我实际上担心Get-Content在这里所做的完全不同。我要传输到Windows的代码是用Free Pascal编写的,在Free Pascal中,我可以提供UTF-8代码页,仅此而已。因此,虽然Get-Content对我来说是检查PowerShell是否能够产生所需输出的好命令,但对我来说使用它并不实际。在Pascal中,输出(写入到PowerShell显示中)显示为:

Pascal Display

这也是不好的,这些行应该连接,因为它们在Linux中是行的(显然有些字符被解释为?)。但是,这可能与在Pascal中选择的代码页有关,这将是下一步。

我现在的问题是,如何使Windows Powershell默认情况下显示记事本版本中显示的文本文件。对我来说,在任何地方在我的代码中运行Get-Content都是不切实际的,因此尽管该结果看起来更有希望,但我无法遵循。

作为后续问题,因为我无法在线上找到它,所以在显示内容时这里的主要参与者是什么,因为它显然比编码更重要。为什么“更多”和“获取内容”命令显示不同的输出?为什么“获取内容”无法读取所有内容?我以为UTF-8是一个通用标准,并且能够读取UTF-8的程序至少可以实际读取所有字符,但是它们的读取方式有所不同。

作为文本,输入为:

╭─────╮
│     │

╭─│────╮│││││││╭─│────╮│││││││╭─│───││╯╯│││││││││││╰─╯│││││││╰────────│─╯││──────────╯

如果单击以编辑我的帖子,则显示效果很好。

linux powershell encoding decoding
1个回答
0
投票
  • 请确保您的UTF-8编码文本文件具有BOM表-否则,Windows PowerShell会将您的文件误解为根据系统的活动ANSI进行编码代码页(现在,PowerShell [Core] 6+在没有BOM的情况下始终一致地默认为UTF-8)。

    • 或者,使用Get-Content -Encoding Utf8 my_file.txt显式指定文件的编码。
  • 在控制台窗口中选择一种可以显示四角字符的字体(例如); Windows PowerShell默认字体Lucinda Console可以not(它呈现enter image description here,如您的问题所示),但是可以是Consolas(例如,PowerShell [Core] 6+默认使用), 可以

使用Get-Content,这是PowerShell的本机命令,代码页(chcp)会起作用[[not,但请参阅以下有关外部程序的信息:


使用UTF-8编码使用外部程序

根据我在网上可以找到的每个答案,CHCP 65001将PowerShell中的代码页切换为UTF-8
如果从

在PowerShell中]运行,

chcp 65001起作用,因为.NET caches PowerShell会话启动时的[Console]::OutputEncoding值,以及当时有效的代码页时间。

相反,您可以使用以下命令使控制台窗口完全支持UTF-8:

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

请参见this answer以获取更多信息。
© www.soinside.com 2019 - 2024. All rights reserved.