首页 > 解决方案 > 如何配置终端以读取 UTF-8 字符?

问题描述

我正在开发一个通过命令行接受用户输入的项目。我正在使用最新的 Windows 10 并且(在绕了很多圈之后......)我知道在处理 UTF-8 字符时它是出了名的糟糕。因此,我使用 VS Code 和集成终端 (PowerShell) 来执行程序的输入。遗憾的是,终端似乎无法接受重音 UTF-8 字符,例如“ë”。然后我做了更多的研究,并将 VS Code 的 settings.json 配置为 UTF-8 BOM 编码。尽管如此,终端还是无法读取重音字符。我确信我的程序不是问题,我的字体也不是。我已将我的代码简化为一个测试算法,该算法仅使用 readline-sync 接受输入(开发人员确认它与 UTF-8 兼容:https://github.) 和“console.log”。

我一直在使用的测试用例是“你好”。当我在 VS Code 终端中输入“你好”时,我的程序会输出“你好”。当我尝试使用 Windows 10 的管理语言设置将我的所有应用程序转换为 UTF-8 编码并随后通过命令终端输入“Hëllo”时,它会输出“Hllo”。我还尝试强制 CMD 使用 Code Page 65001 和 chcp 65001 进行 UTF-8 编码,但它仍然产生“Hllo”。

这是我用来通过 settings.json 配置 VS Code PowerShell 终端的代码:

{
    "[powershell]": {
    "files.encoding": "utf8bom",
    "files.autoGuessEncoding": true
    }
}

这是我编写的简短代码,用于测试我的输入/输出以及“ë”是否被成功读取(不是):

const rlSync = require('readline-sync');

const name = rlSync.question('Enter Player 1 Username (Case Sensitive): ');
console.log(name);

如果大家看到任何问题,请告诉我!

我正在寻找任何方法来正确配置我的 CLI 以接受重音字符以在我的程序中使用。我并不是要将这个问题限制在 VS Code 或 Powershell 上。如果有一种方法可以使用基本的 Windows 10 CMD 完成此操作,我会喜欢的。感谢您提供的任何帮助!<3

标签: node.jscmdutf-8visual-studio-codecharacter-encoding

解决方案


您使用 VSCode 有什么特别的原因吗?我认为您正在寻找 System.Console InputEncoding / OutputEncoding - 不幸的是,我的默认编码仅适用于“Hëllo”,因此无法准确测试,我不知道这是否适用于 VSCode。

试试这个(一次一行)

# store current encoding settings
$i = [System.Console]::InputEncoding
$o = [System.Console]::OutputEncoding

# set encoding to UTF8
[System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# test
"Hëllo"

# revert (if you want. if you don't want, I would at least note the default encoding)
[System.Console]::InputEncoding =  $i
[System.Console]::OutputEncoding = $o

推荐阅读