【问题标题】:How do I configure a terminal to read UTF-8 characters?如何配置终端以读取 UTF-8 字符?
【发布时间】:2019-08-14 09:39:49
【问题描述】:

我正在开发一个通过命令行接受用户输入的项目。我正在使用最新的 Windows 10 并且(经过多次转圈......)我知道在处理 UTF-8 字符时它是出了名的糟糕。因此,我使用 VS Code 和集成终端 (PowerShell) 来执行程序的输入。遗憾的是,终端似乎无法接受重音 UTF-8 字符,例如“ë”。然后我做了更多的研究,并将 VS Code 的 settings.json 配置为 UTF-8 BOM 编码。尽管如此,终端还是无法读取重音字符。我确信我的程序不是问题,我的字体也不是。我已经将我的代码简化为一个测试算法,它只使用 readline-sync(开发人员确认它与 UTF-8 兼容:https://github.com/anseki/readline-sync/issues/58)和“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 完成此操作,我会喜欢的。感谢您提供的任何帮助!

【问题讨论】:

    标签: node.js cmd utf-8 visual-studio-code character-encoding


    【解决方案1】:

    您使用 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
    

    【讨论】:

    • 我只使用 VS Code 是因为它似乎比 Windows cmd 更具男性化。关于你的建议,我在哪里输入?我最终会将包含非 ASCII 字母的名称输入到不同的算法中——这只是我在任何类型的输入中遇到的基本问题。
    • 这将直接在 PowerShell 控制台上。 (开始菜单 > Windows Powershell)。
    • 我输入了您建议的命令,控制台输出了我输入的内容...但是如何在我自己的程序中使用该输入?我已经用我的测试代码(用 JS 编写)更新了问题,但是当我在该程序中输入“Hëllo”时,它仍然输出“Hllo”。
    • 这超出了问题的范围和我的知识范围。我建议您查看this stackoverflow post。如果它不能回答您的问题,请询问另一个问题,包括 javascript 标签并排除 powershell
    • 根据您的建议调整了标签。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 2017-05-04
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多