我们必须为老师做一个小程序,以获取Javascript中任何值的ASCII码。
我已经进行了搜索和研究,但似乎没有办法这样做。我只找到了:
charCodeAt()
返回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,还是应该寻找其他方式?
谢谢!
答案 0 :(得分:5)
ASCII字符仅使用7位,值为0到127(十六进制为00到7F)。它们包括:
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);
}