ASCII(美国信息交换标准代码)是一种基于拉丁字母的字符编码系统,广泛应用于现代计算机文本通信,它定义了128个字符的标准编码,包括英文字母(大小写)、数字0-9、常用标点符号以及控制字符(如换行、回车等),每个ASCII字符对应一个唯一的十进制数值,范围从0到127,其中0-31和127是控制字符,32-126是可打印字符,在JavaScript中,将ASCII字符转换为十进制数是常见的操作,主要用于文本处理、数据编码、网络通信等场景。

JavaScript提供了内置方法String.prototype.charCodeAt()来实现这一功能,该方法返回给定索引位置的字符的UTF-16代码单元值,对于ASCII字符(Unicode编码在U+0000到U+007F之间),UTF-16代码单元值与ASCII码完全一致,因此可以直接使用charCodeAt()获取对应的十进制数,其语法为str.charCodeAt(index),其中str是字符串,index是字符在字符串中的位置(从0开始),省略index则默认为0,如果index超出字符串长度,charCodeAt()会返回NaN。
获取字符’A’的ASCII码:
const char = 'A'; const asciiCode = char.charCodeAt(0); // 返回65
字符’0’的ASCII码:
const char = '0'; const asciiCode = char.charCodeAt(0); // 返回48
对于字符串中的每个字符,可以通过循环逐个转换:
const str = "Hello";
const asciiArray = [];
for (let i = 0; i < str.length; i++) {
asciiArray.push(str.charCodeAt(i));
}
console.log(asciiArray); // 输出 [72, 101, 108, 108, 111] 除了单个字符转换,有时需要将整个字符串的ASCII码序列转换为特定格式,如用逗号分隔的字符串:
const str = "JS";
const asciiStr = str.split('').map(char => char.charCodeAt(0)).join(',');
console.log(asciiStr); // 输出 "74,83" 如果需要将十进制数转换回ASCII字符,可以使用String.fromCharCode()方法,它接受一个或多个UTF-16代码单元值,并返回对应的字符。

const code1 = 65; const code2 = 66; const char1 = String.fromCharCode(code1); // 返回 'A' const char2 = String.fromCharCode(code2); // 返回 'B' const str = String.fromCharCode(72, 101, 108, 108, 111); // 返回 "Hello"
在实际应用中,处理用户输入时可能需要验证输入是否为有效的ASCII字符,检查输入字符串是否只包含ASCII可打印字符(32-126):
function isAsciiPrintable(str) {
for (let i = 0; i < str.length; i++) {
const code = str.charCodeAt(i);
if (code < 32 || code > 126) {
return false;
}
}
return true;
}
console.log(isAsciiPrintable("Hello!")); // true
console.log(isAsciiPrintable("你好")); // false(中文字符超出ASCII范围) 以下是ASCII码表中部分常用字符及其对应的十进制值:
| 字符 | 十进制值 | 字符 | 十进制值 |
|---|---|---|---|
| 空格 | 32 | ‘0’ | 48 |
| 33 | ‘A’ | 65 | |
| ‘a’ | 97 | ‘z’ | 122 |
| ‘0’ | 48 | ‘9’ | 57 |
| LF(换行) | 10 | CR(回车) | 13 |
需要注意的是,ASCII编码仅支持英文字符,对于非英文字符(如中文、日文等),charCodeAt()返回的是UTF-16编码值,可能是一个大于127的数字(甚至需要两个UTF-16代码单元表示一个字符,如大部分Unicode字符在U+10000以上时),如果需要处理多字节字符,应考虑使用codePointAt()和String.fromCodePoint()方法,它们能正确处理完整的Unicode码点。
在数据传输或存储中,有时需要将ASCII字符序列转换为字节数组,将字符串”AB”转换为[65, 66]:
function stringToAsciiBytes(str) {
const bytes = [];
for (let i = 0; i < str.length; i++) {
bytes.push(str.charCodeAt(i));
}
return bytes;
}
console.log(stringToAsciiBytes("AB")); // [65, 66] 反之,将字节数组转换回字符串:
function asciiBytesToString(bytes) {
return String.fromCharCode(...bytes);
}
console.log(asciiBytesToString([65, 66])); // "AB" 在处理二进制数据时,可以使用TypedArray(如Uint8Array)来存储ASCII码,提高性能:

const str = "ASCII";
const uint8Array = new Uint8Array(str.length);
for (let i = 0; i < str.length; i++) {
uint8Array[i] = str.charCodeAt(i);
}
console.log(uint8Array); // Uint8Array [65, 83, 67, 73, 73] JavaScript中通过charCodeAt()方法可以轻松将ASCII字符转换为十进制数,结合String.fromCharCode()可实现反向转换,掌握这些方法对于处理文本数据、实现编码转换、构建通信协议等场景至关重要,需要注意ASCII编码的局限性,对于国际化文本应使用Unicode编码(UTF-8、UTF-16等)。
相关问答FAQs
Q1: 如何将整个字符串的每个字符都转换为对应的ASCII码,并以数组形式存储?
A1: 可以通过字符串的split('')方法将字符串拆分为字符数组,然后使用map()方法对每个字符调用charCodeAt(0),最终得到ASCII码数组。
const str = "JavaScript";
const asciiArray = str.split('').map(char => char.charCodeAt(0));
console.log(asciiArray); // 输出 [74, 97, 118, 97, 83, 99, 114, 105, 112, 116] Q2: ASCII和Unicode在字符转换时有什么区别?
A2: ASCII是Unicode的子集,仅包含128个字符(0-127),而Unicode是包含全球所有语言的字符编码系统,范围从0到0x10FFFF,在JavaScript中,charCodeAt()返回的是UTF-16代码单元值,对于ASCII字符(U+0000-U+007F)与ASCII码一致;但对于非ASCII字符(如中文“字”,Unicode码点为U+5B57),charCodeAt()可能返回两个UTF-16代码单元(如“字”的UTF-16为0x5B57,charCodeAt()返回一个值,因为U+5B57在基本多语言平面,只需一个代码单元),如果字符超出基本多语言平面(如某些生僻字),需要使用codePointAt()获取完整的Unicode码点。
const asciiChar = 'A';
const unicodeChar = '字';
console.log(asciiChar.charCodeAt(0)); // 65(与ASCII码一致)
console.log(unicodeChar.charCodeAt(0)); // 23383(Unicode码点U+5B57的十进制)
console.log('𠀁'.codePointAt(0)); // 65536(超出BMP的字符,需用codePointAt) 【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复