在JavaScript中将字符转换为ASCII代码

时间:2008-09-18 16:13:48

标签: javascript

如何使用JavaScript将字符转换为ASCII码?

例如:

  

从“\ n”获得10分。

13 个答案:

答案 0 :(得分:1305)

"\n".charCodeAt(0);

答案 1 :(得分:348)

String.prototype.charCodeAt()可以将字符串字符转换为ASCII数字。例如:

"ABC".charCodeAt(0) // returns 65

对于将数字转换为等于ASCII字符的相反用途String.fromCharCode(10)。此函数可以接受多个数字并连接所有字符然后返回字符串。例如:

String.fromCharCode(65,66,67); // returns 'ABC'

这是一个快速的ASCII字符引用:

{
"31": "",      "32": " ",     "33": "!",     "34": "\"",    "35": "#",    
"36": "$",     "37": "%",     "38": "&",     "39": "'",     "40": "(",    
"41": ")",     "42": "*",     "43": "+",     "44": ",",     "45": "-",    
"46": ".",     "47": "/",     "48": "0",     "49": "1",     "50": "2",    
"51": "3",     "52": "4",     "53": "5",     "54": "6",     "55": "7",    
"56": "8",     "57": "9",     "58": ":",     "59": ";",     "60": "<",    
"61": "=",     "62": ">",     "63": "?",     "64": "@",     "65": "A",    
"66": "B",     "67": "C",     "68": "D",     "69": "E",     "70": "F",    
"71": "G",     "72": "H",     "73": "I",     "74": "J",     "75": "K",    
"76": "L",     "77": "M",     "78": "N",     "79": "O",     "80": "P",    
"81": "Q",     "82": "R",     "83": "S",     "84": "T",     "85": "U",    
"86": "V",     "87": "W",     "88": "X",     "89": "Y",     "90": "Z",    
"91": "[",     "92": "\\",    "93": "]",     "94": "^",     "95": "_",    
"96": "`",     "97": "a",     "98": "b",     "99": "c",     "100": "d",    
"101": "e",    "102": "f",    "103": "g",    "104": "h",    "105": "i",    
"106": "j",    "107": "k",    "108": "l",    "109": "m",    "110": "n",    
"111": "o",    "112": "p",    "113": "q",    "114": "r",    "115": "s",    
"116": "t",    "117": "u",    "118": "v",    "119": "w",    "120": "x",    
"121": "y",    "122": "z",    "123": "{",    "124": "|",    "125": "}",    
"126": "~",    "127": ""
}

答案 2 :(得分:27)

如果您只有一个字符而不是字符串,则可以使用:

'\n'.charCodeAt();

省略0 ...

虽然速度较慢。使用当前版本的chrome,速度要慢5倍。

答案 3 :(得分:20)

虽然其他答案是对的,但我更喜欢这种方式:

function ascii (a) { return a.charCodeAt(0); }

然后,使用它,只需:

var lineBreak = ascii("\n");

我将它用于一个小型快捷方式系统:

$(window).keypress(function(event) {
  if (event.ctrlKey && event.which == ascii("s")) {
    savecontent();
    }
  // ...
  });

你甚至可以在map()或其他方法中使用它:

var ints = 'ergtrer'.split('').map(ascii);

答案 4 :(得分:15)

对于那些想要获得字符串的所有ASCII码的总和的人:

'Foobar'
  .split('')
  .map(function (char) {
    return char.charCodeAt(0);
  })
  .reduce(function (current, previous) {
    return previous + current;
  });

或者,ES6:

[...'Foobar']
  .map(char => char.charCodeAt(0))
  .reduce((current, previous) => previous + current)

答案 5 :(得分:6)

JavaScript将字符串存储为UTF-16(双字节),因此如果要忽略第二个字节,只需使用&上的按位0000000011111111运算符将其删除(即255):< / p>

'a'.charCodeAt(0) & 255 === 97; // because 'a' = 97 0 
'b'.charCodeAt(0) & 255 === 98; // because 'b' = 98 0 
'✓'.charCodeAt(0) & 255 === 19; // because '✓' = 19 39

答案 6 :(得分:4)

要确保完全支持Unicode和可逆性,请考虑使用:

object_count %>%
  mutate(cuml = cumsum(count)) %>%
  ggplot(aes(obj_num)) +
  geom_tile(aes(y = count + lag(cuml, default = 0),
            height = count))

这将确保在测试超过UTF-16限制的字符时,您将获得其真实的代码点值。

例如

'\n'.codePointAt(0);

答案 7 :(得分:3)

要将字符串转换为累积数字:

const stringToSum = str => [...str||"A"].reduce((a, x) => a += x.codePointAt(0), 0);

console.log(stringToSum("A"));              // 65
console.log(stringToSum("Roko"));           // 411
console.log(stringToSum("Stack Overflow")); // 1386

用例:

假设您想根据用户名生成不同的背景颜色:

const stringToSum = str => [...str||"A"].reduce((a, x) => a += x.codePointAt(0), 0);

const UI_userIcon = user => {
  const hue = (stringToSum(user.name) - 65) % 360; // "A" = hue: 0
  console.log(`Hue: ${hue}`);
  return `<div class="UserIcon" style="background:hsl(${hue}, 80%, 60%)" title="${user.name}">
    <span class="UserIcon-letter">${user.name[0].toUpperCase()}</span>
  </div>`;
};

[
  {name:"A"},
  {name:"Amanda"},
  {name:"amanda"},
  {name:"Anna"},
].forEach(user => {
  document.body.insertAdjacentHTML("beforeend", UI_userIcon(user));
});
.UserIcon {
  width: 4em;
  height: 4em;
  border-radius: 4em;
  display: inline-flex;
  justify-content: center;
  align-items: center;
}

.UserIcon-letter {
  font: 700 2em/0 sans-serif;
  color: #fff;
}

答案 8 :(得分:1)

为了支持ES6中的所有UTF-16(也是non-BMP/supplementary characters),string.codePointAt()方法可用;

此方法是charCodeAt的改进版本,它只能支持unicode代码点&lt; 65536(2 16 - 单个16位)。

答案 9 :(得分:1)

您可以输入一个字符并使用此代码获取Ascii代码

例如输入像A的字符 你得到Ascii Code 65

function myFunction(){
    var str=document.getElementById("id1");
    if (str.value=="") {
       str.focus();
       return;
    }
    var a="ASCII Code is == >  ";
document.getElementById("demo").innerHTML =a+str.value.charCodeAt(0);
}
<p>Check ASCII code</p>

<p>
  Enter any character:  
  <input type="text" id="id1" name="text1" maxLength="1">	</br>
</p>

<button onclick="myFunction()">Get ASCII code</button>

<p id="demo" style="color:red;"></p>

答案 10 :(得分:0)

可以使用for循环获取所有可打印ASCII字符的列表。

for(var i = 33; i < 127; i++){
	document.write("<p>"+i + ": " + String.fromCharCode(i)+"</p>");
}

答案 11 :(得分:0)

str.charCodeAt(index)

使用charCodeAt() 以下示例返回65,即A的Unicode值。

'ABC'.charCodeAt(0) //返回65

答案 12 :(得分:0)

将字符串转换为 UTF-8 的数组(流):

const str_to_arr_of_UTF8 = new TextEncoder().encode("Adfgdfs");

结果 - [65、100、102、103、100、102、115]

  • ASCII 是 UTF-8 的子集,所以这是一个通用的解决方案
相关问题