linux - Linux 和 Windows 之间的文本编码
问题描述
我的主要问题是如何让我在 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 的代码是用 Free Pascal 编写的,在 Free Pascal 中,我可以提供 UTF-8 代码页,仅此而已。因此,虽然 Get-Content 对我来说是一个很好的命令来检查 PowerShell 是否能够产生所需的输出,但对我来说使用它是不切实际的。在 Pascal 中,输出(写入 PowerShell 显示)显示为:
这也很糟糕,这些行应该连接,因为它们在 Linux 中会连接(显然有些字符被解释为?)。但是,这可能是 Pascal 中选择的代码页的问题,这将是下一步。
我现在的问题是,如何让 Windows Powershell 默认显示一个文本文件,如记事本版本中所示。在我的代码中到处运行 Get-Content 对我来说是不切实际的,因此尽管结果看起来更有希望,但我不能遵循这一点。
作为一个后续问题,因为我在网上的任何地方都找不到它,所以在显示内容时这里的主要参与者是什么,因为它显然是一个比编码更大的故事。为什么“更多”和“获取内容”命令显示不同的输出?为什么“获取内容”不能读取所有内容?我曾假设 UTF-8 是一个通用标准,能够读取 UTF-8 的程序至少实际上可以读取所有字符,但它们的读取方式都不同。
作为文本的输入是:
╭─────╮
│ │
╭─│───╮ │
│ │ │ │
│ │ ╭─│───╮
│ │ │ │ │ │
╭─│───│─╯ │ │
│ │ │ │ │ │
│ │ ╰─╯ │ │
│ │ │ │
│ ╰───────│─╯
│ │
╰─────────╯
针对下面发布的答案,我可以看到
more my_file.txt
生产
使用时
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding =
New-Object System.Text.UTF8Encoding
解决方案
推荐阅读
- flutter - BannerAd 事件是 MobileAdEvent.failedToLoad
- javascript - 在一个应用程序中同时拥有 MobX 和 setState 是一种好习惯吗?
- java - 从 ListView 中获取选定对象
- c++ - 在不增加耦合的情况下避免 dynamic_cast
- java - 为什么在 Spring 中实例化接口而不是实现它的类?
- python - 基于相同形状数组中的逻辑和值的 Numpy 替换元素
- kotlin - 我什么时候应该在 Kotlin 中使用委托?
- react-native - java.lang.String - 脸书广告
- getstream-io - 流聊天 API 是否符合 HIPAA 和 GDPR 标准?
- c# - 使用 IMemoryCache 单例每个存储库?