使用 javascript 处理非 ASCII 字符输入的最简单方法是什么?

What is the simplest way to handle non-ASCII character input with javascript?

我正在开发一个项目,该项目接受用户输入的名称,然后导航到网站以抓取与该名称相关的数据。一切正常,除非用户输入非 ASCII 字符、重音字符和非西方字符。我正在寻找最简单的方法来将这些字符存储在字符串中,而无需 javascript 将它们转换为“�”。

我对这个问题做了一些研究,发现了与我类似的问题,但它们似乎都解决了通过重音折叠从字符中删除重音的问题,而不是简单地存储这些字符供以后使用。

我正在使用 readline-sync Node 模块来简化请求用户输入的过程。如果这是问题的一部分,请告诉我!这是我的测试算法的全部代码:

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

const name = await rlSync.question('Enter player name (Case Sensitive): ');
console.log(name);

这是出现问题的测试算法的所有代码,所以我知道来源不在别处。到目前为止,我一直在使用的主要测试用例是带有字母“ë”的任何名称,尽管这不是唯一有问题的字符。当我在输入提示中键入 "Hëllo" 时,程序输出 "H�llo".

非常感谢大家提供的任何帮助! <3

UPDATE 基于每个人的回应和大量研究:我认为你们都对控制台设置是问题而不是代码是正确的。有没有人对使用 UTF-8 的良好替代 CLI 或更新 Windows 命令提示符中的设置的方法提出建议?

我的 Windows 版本是 10.0.18362.267。我尝试通过管理语言设置将语言设置为 "Beta: use UTF-8",但这似乎提出了另一个问题:cmd 没有打印 "H�llo",而是打印了 "Hllo".

(如果这超出了本论坛的范围,我完全理解......只是希望得到尽可能多的帮助!):-)

我重新阅读了你的问题...我不记得以前有 node.js 位,但是....

您的问题不在您的程序中。这是您终端中的设置。您需要更改终端设置以使用 UTF-8 和能够显示这些字符的字体。或者切换到可以的终端。

如果您的终端只能理解 ASCII 或设置了错误的编码,它会显示替换字符,因为它无法显示它们。

Node.js 默认使用 UTF-8,所以内部应该没问题。

**注: 我检查了 readline-sync 以确保它不是问题所在,我读到的内容似乎支持这个假设。

https://github.com/anseki/readline-sync/issues/58

ECMAScript (Node.JS) already supports Unicode, by default. If your environment (not readlineSync) does not support those characters (e.g. you use Windows), the console.log method in your code can not print those when the answer contains those characters.


旧答案: 如果您看到该符号代替字符,几乎可以肯定是字体问题而不是 javascript 问题。尝试使用支持这些字符的字体。如何执行此操作取决于您查看输出的方式(即终端、浏览器等)。如果这不起作用,您可能还需要具体使用 utf8,并且还依赖于相同的。

这似乎是您服务器上的文本编码设置的问题。如果存储在 DB 中,则可能不是 UTF-8,如果直接发生在输出节点中,从文件读取并在控制台输出,那么如果从文件读取,则必须确保指定使用 UTF-8。如果像您一样使用节点 cli 并从控制台输入读取,这是您不支持多字节的文本编码引擎。 所以这是一个设置问题,因此请确保所有内容都是 UTF-8 甚至 16,因为必须支持多字节,因为所有重音都被存储,导致他们需要第二个内存 space 用于重音...