windows - 在运行和运行选择之间使用 PowerShell 在 Visual Studio Code 的集成终端中出现错误的变音字母
问题描述
我有带有 Windows-1250 编码的 Windows 10,但在带有集成终端的 Visual Studio Code 中,我遇到了变音符号的问题:
如您所见,同一命令的运行和运行选择之间的编码不同:write-host "Wspólny"
我的 JSON 用户配置为空,我已经尝试了几个小时,但没有解决方案有帮助。我想到处使用 UTF-8。
解决方案
最可能的解释:
您正在运行Windows PowerShell,它根据系统的活动 ANSI 代码页(
1250
在您的示例中)读取其源代码。相比之下,Visual Studio Code 默认创建无 BOM 的 UTF-8编码文件。
如果源代码文件(或 Windows PowerShell 读取的任何文本文件,例如 with
Get-Content
)中没有 BOM,则假定为ANSI编码,因此 UTF-8 文件被误解。具体来说,任何非 ASCII 字符的每个单独字节(在 UTF-8 中总是被编码为多字节序列)然后被解释为 ANSI 字符。
注意:这在 PowerShell (Core) 7+ 中不再是问题,它始终默认为 UTF-8,无论是在读取 BOM-less 文件时还是在写入文件时(BOM-less UTF-8)。
因此,解决方案是将源代码(或您希望 Windows PowerShell 正确读取的任何 UTF-8 文件)保存为带有 BOM的 UTF-8。
您还需要对希望在两个版本的 PowerShell 中正确运行的源代码执行此操作。
推荐阅读
- javascript - 如何通过忽略对象中的 isDeleted 标志来更新订单值
- unity3d - Unity 2020.1.1f1 服务中没有多人游戏
- sql - 如何使用一条 SQL 语句使记录组无效?
- sql-server - 将 SQL Server 从 Express 升级到 Developer,但仍然无法在 SSMS 中使用开发人员服务器
- slurm - 在 slurm 中打印每个作业使用的 cpu 数量?
- laravel - 如何在 laravel 的 stdClass 中设置新属性
- python - 如何在 Python concurrent.futures.ProcessPoolExecutor 中的父处理器和子处理器之间获得相同的哈希值?
- c++ - std::tie 用于较少的比较和 char 数组
- boolean - 布尔简化 - 为什么 (A + NOT(BC)).(B + NOT(BC)).(C + NOT(BC)) = A + NOT BC
- android - Android Beacon 库不能作为前台服务