我们可以在Javascript中将Unicode转换为ASCII吗? charCodeAt()仅适用于Unicode?

时间:2016-10-12 21:44:17

标签: javascript string unicode char ascii

我们必须为老师做一个小程序,以获取Javascript中任何值的ASCII码。

我已经进行了搜索和研究,但似乎没有办法这样做。我只找到了:

charCodeAt()

http://www.hacksparrow.com/get-ascii-value-of-character-convert-ascii-to-character-in-javascript.html

返回Unicode值,但不返回ASCII。

我在这个论坛中读到,ASCII值与已经具有ASCII值的ASCII字符的Unicode值相同:

Are Unicode and Ascii characters the same?

但似乎并非总是如此,例如扩展的ASCII字符。例如:

var myCaracter = "├";

var n = myCaracter.charCodeAt(0);

document.write (n);

该字符的ASCII值为195,但程序返回226(Unicode值)。

我找不到要从一个转换为另一个的模式,所以:

¿我们可以从Unicode获取ASCII,还是应该寻找其他方式?

谢谢!

2 个答案:

答案 0 :(得分:5)

ASCII字符仅使用7位,值为0到127(十六进制为00到7F)。它们包括:

  • 控制字符(0到31,以及127)
  • 位数(0到9,编码为48到57)
  • 大写字母(65到90)
  • 小写字母(97到122)
  • 数量有限的标点符号和其他符号。

ASCII字符是Unicode的一个子集(" C0控件和基本拉丁语块"),它们在UTF-8中编码完全相同。 " A"的ASCII码(65或0x41)与" A"的Unicode代码点相同。 (U + 0041)。

您考虑的字符()不是ASCII。它是许多不同字符集/代码页的一部分,它可能有不同的数值/编码,但它绝对不是ASCII。

这些字符甚至没有在最常见的ASCII 8位扩展中定义,称为ISO-8859- *。它是代码页437(在MS-DOS上使用)的一部分,其数字代码是0xC3(195)。但那肯定不是ASCII。

该字符的Unicode代码点是U + 251C(十进制9500),这是该字符的charCodeAt的返回值,而不是226。

您可能会获得226,因为您正在解释未被识别的UTF-8字符串。

答案 1 :(得分:2)

今天我的老师已经道歉了,因为告诉我们charCodeAt()获取ASCII码是错误的,这可能是她的错。她希望我们使用这种方法,就像雷克萨斯提出的@Rad一样。

所以,我的练习不是必需的,但作为一种练习并帮助每个需要它的人,我所做的就是在代码中添加一个小的验证,以避免用户输入ASCII扩展字符大于或等于128,其中charCodeAt()的问题似乎开始。

也许这不是一个聪明的解决方案,而且在我的练习中肯定没有必要,而且它会使一些必要的角色用另一种语言(例如德语或ñ西班牙语)被禁止......但我认为发布代码并让使用它的每个人都选择是否使用此验证。

感谢所有帮助过我的人。

定义功能:

function validate(text)
{

    var isValid=false;

    var i=0;


    if(text != null && text.length>0 && text !='' )
    {
        isValid=true;

        for (i=0;i<text.length;++i)/*this is not necessary, but I did*/
        {
            if(text.charCodeAt(i)>=128)
            {
                isValid=false;
            }
        }

    }

    return isValid;

}

使用功能

var isValid=false;

var position=0; 

while(isValid==false)
{
    text=prompt("Enter your text");

    isValid=validate(text);
}