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

用javascript处理非ASCII字符输入的最简单方法是什么?,javascript,node.js,non-ascii-characters,Javascript,Node.js,Non Ascii Characters,我正在从事一个项目,该项目接受用户输入的名称,然后导航到一个网站以获取与该名称相关的数据。除了用户输入非ASCII字符、重音字符和非西方字符外,一切都进行得很顺利。我正在寻找一种最简单的方法来将这些字符存储在字符串中,而无需javascript将它们转换为“�". 我对这个问题做了一些研究,发现了与我类似的问题,但它们似乎都解决了通过重音折叠从字符中删除重音的问题,而不是简单地存储这些字符以供以后使用 我正在使用readline sync Node模块简化请求用户输入的过程。如果这是问题的一部分

我正在从事一个项目,该项目接受用户输入的名称,然后导航到一个网站以获取与该名称相关的数据。除了用户输入非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”�罗”


非常感谢您能提供的任何帮助!我重新阅读了您的问题…我不记得node.js位以前出现过,但是

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

如果您的终端仅理解ASCII码或设置为错误编码,则它将显示替换字符,因为它无法显示它们

Node.js默认使用UTF-8,所以内部应该都很好

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

默认情况下,ECMAScript(Node.JS)已经支持Unicode 环境(非readlineSync)不支持这些字符(例如。 如果使用Windows),则无法打印代码中的console.log方法 当答案包含这些字符时,将显示这些字符


旧答案:
如果您看到该符号代替了字符,则几乎可以肯定这是字体问题,而不是javascript问题。请尝试使用支持这些字符的字体。如何做到这一点取决于您使用什么查看输出(即终端、浏览器等)。如果这不起作用,您可能还需要具体使用utf8,这也取决于utf8。

这似乎是您在服务器上的文本编码设置问题。如果存储在数据库中,则可能不在UTF-8中,如果直接发生在节点输出中,从文件读取并在控制台中输出,则必须确保指定在以下情况下使用UTF-8从文件读取。如果使用node cli和从控制台输入读取时发生这种情况,则这是不支持多字节的文本编码引擎。
这是一个设置问题,所以请确保所有字符都在UTF-8甚至16中,因为存储所有重音符号时必须支持多字节,这是什么原因导致它们需要第二个内存空间来存储重音符号…

字符串存储在哪里?何时看到字符损坏?输入字符时,它们肯定仍然正常。是否存储并重新存储在数据库中保存文本,您是说在检索时字符串与您之前编写的内容不一致吗?
console.log(name)
输出有趣的字符?如果没有,请提供看到损坏字符的代码?在
标题中添加
是否有帮助?@vivek_23 OP使用的是node.js,而不是浏览器中的网站。@trincot控制台。log(name)会输出菱形“”,而不是输入的“ë”。我考虑了字体问题,但最终我在URL中使用了字符串,其中“?”再次出现。你说wrt使用utf8指定是什么意思?不,该符号表示不正确的文本处理。矩形或正方形表示字体问题。U+FFFD� 替换字符用于替换未知、无法识别或不可表示的字符。--有时可能由字符编码范围之外的二进制数据引起。您在终端、特定浏览器、页面、地址栏、开发工具中看到了什么?什么操作系统和特定字体?在浏览器中,您通常会看到矩形le表示字体中没有字符的已知字符。在终端中,您可能会得到带有问号的daimond。这取决于字体、应用程序和预期编码。您好。我根据更新的信息更新了我的答案。如果您使用Win 10,您可以使用新的Windows终端----我认为VSCode也可以工作,因为它基于在xterm.js上,但我必须检查一下才能确定。