readline-sync不在Windows上使用正确的编码

时间:2016-01-27 02:15:58

标签: javascript node.js encoding

我正在使用readline-sync向我的noedejs命令行应用程序的用户询问一些信息。
在我的linux终端中,一切都可以正常使用德语变音符号(öäü),但是当在Windows shell(PowerShell或cmd)上读取输入时,尽管已将编码设置为utf8,但仍会输入我的输入:

var rls = require('readline-sync');
// set encoding for rls:
rls.setDefaultOptions({encoding: 'utf8'});

...

var test = rls.question("Input name: ");
console.log("Created: " + test);

Windows上的输出:

PS > tim test
Input name: töst
Created: t�st

我通过命令行args传递给我的应用程序的参数也会非常有趣。

这是一个错误吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

我找不到使该模块从Windows终端正确读取重音符号的任何方法。但是我注意到默认模块readline没有这种类型的问题。

因此,我对方法question进行了解决:

const readline = require('readline');

const question = question => {
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });

    return new Promise(resolve => {
        rl.question(question, answer => {
            rl.close();
            return resolve(answer);
        });
    });
};

async function main() {
    const answer = await question('Enter your text with accents: ');
    console.log(answer);
}

main().catch(console.error);

对于其他方法,例如keyInSelect,您也可以使用这种方法。