Преобразование символа в код ASCII в JavaScript

Как преобразовать символ в его код ASCII с помощью JavaScript?

Например:

get 10 from "\n".

Обратите внимание, что метод String.prototype.charCodeAt (), предлагаемый в большинстве ответов, вернет Кодовый блок UTF-16 (даже не полную правильную кодировку UTF-16 по историческим причинам). Только первые 128 кодовых точек Unicode являются прямым соответствием кодировки символов ASCII.

Álvaro González 16.01.2018 16:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1 033
1
1 005 625
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

"\n".charCodeAt(0);

Противоположность этому - String.fromCharCode(10).

viam0Zah 01.05.2011 13:38

Интересный факт: вам действительно не нужен 0 (значение первого аргумента) - подойдет только "\n".charCodeAt().

Mathias Bynens 17.10.2011 13:40

@MathiasBynens: и, к счастью, это задокументировано: developer.mozilla.org/en/JavaScript/Reference/Global_Objects‌ /…. "если это не число, по умолчанию 0"

tokland 15.11.2011 23:46

Следует отметить, что в отличие от String.fromCharCode( asciiNumVal ), stringInstance.charCodeAt( index ) является нет статическим методом класса String.

bobobobo 12.09.2012 23:09

@Mathias Bynens, Он, конечно, по умолчанию равен нулю, но я просто провел тест производительности просто из интереса, и он работает ** относительно плохо по сравнению с использованием 0. jsperf.com/default-to-0-vs-0/4 ** Это только относительное различие, в любом случае оно очень быстрое.

wade montague 09.05.2013 16:35

@wademontague Я бы никогда не подумал проверить это. Это так смешно! Спасибо за результат.

Qix - MONICA WAS MISTREATED 10.05.2014 00:55

Я думаю, что немного яснее (с точки зрения удобочитаемости) указать индекс вместо того, чтобы оставлять его по умолчанию ... но в любом случае это второстепенно

Lior 18.06.2014 16:05

@MathiasBynens charCodeAt() без аргументов не имеет смысла

developerbmw 29.05.2015 00:40

@developerbmw Попробуйте "ABC".charCodeAt(0) // return 65 - это просто массив позиций A ..., другая позиция B - "ABC".charCodeAt(1) // return 66, я согласен, что @Mathias верен.

KingRider 01.04.2016 16:56

По-видимому, пропуск 0 медленнее, если кому-то интересно. См. Комментарий Ройхови к ответу Марко Альтиери ниже.

Andrew 08.03.2017 18:18

пожалуйста, не просто объясняйте решение, почему оно сработает, с поддерживающим ответом

maheshmnj 04.02.2019 09:58

включая 0 теперь медленнее в Chrome 75 на 2% для всех, кого это интересует ... интересно, что .charCodeAt (1) был самым производительным (0,03% быстрее, чем без аргументов)

Taugenichts 27.06.2019 23:54

«\ п» .charCodeAt (); // 0 можно игнорировать

xgqfrms 17.07.2020 17:37

charCodeAt() без аргументов выдает ошибку в TypeScript.

Laurent Payot 15.12.2020 14:25

String.prototype.charCodeAt() может преобразовывать строковые символы в числа ASCII. Например:

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

В противном случае используйте String.fromCharCode(10), который преобразует числа в одинаковые символы ASCII. Эта функция может принимать несколько чисел и объединять все символы, а затем возвращать строку. Пример:

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": ""
}

Лучшая ссылка на ascii: en.wikipedia.org/wiki/ASCII - я очень горжусь тем, что раскраска, которую я сделал для таблиц на этой странице, остается там спустя почти 10 лет :)

B T 25.04.2014 23:00

@theGrayFox C:\> man ascii дает Bad command or file name

e2-e4 12.06.2015 09:53

Обратите внимание, что эти методы совместимы с UTF-16, то есть в зависимости от входной строки charCodeAt может выходить далеко за пределы 1 байтовых значений ASCII 0–127. Не предполагайте, что это находится в этом диапазоне, если произвольный ввод строки принимается и обрабатывается javascript.

theferrit32 21.08.2019 00:11

Если у вас только один символ, а не строка, вы можете использовать:

'\n'.charCodeAt();

опуская 0 ...

Раньше он был значительно медленнее, чем 'n'.charCodeAt(0), но я протестировал его сейчас и больше не вижу разницы (выполнено 10 миллиардов раз с 0 и без него). Проверено на работоспособность только в Chrome и Firefox.

На самом деле это занимает больше времени. Лучше просто использовать ноль. (На моем компьютере это заняло примерно вдвое больше времени - 0,055 с против 0,126 с через несколько десятков тысяч итераций)

royhowie 27.11.2014 03:09

Хотя другие ответы верны, я предпочитаю такой способ:

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);

Просто для красоты новый способ написания ES6: const ascii = a => a.charCodeAt(0);

axkibe 29.11.2017 12:10

Для тех, кто хочет получить сумму всех кодов ASCII для строки:

'Foobar'
  .split('')
  .map(x=>x.charCodeAt(0))
  .reduce((a,b)=>a+b);

Или ES6:

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

Еще раз проверьте свою последнюю строку.

Ypnypn 15.10.2015 00:43

Элегантно! как функция: function ascii (str) {return str .split ('') .map (function (char) {return char + ":" + String (char.charCodeAt (0)) + "\ n";}) .reduce (функция (текущая, предыдущая) {вернуть текущую + предыдущую;}); }

Darren Griffith 01.12.2016 22:47

[...'Foobar'].reduce((i,s)=>s.charCodeAt(0)+i,0)

Nick 05.12.2016 17:48

Никто не запрашивал сумму всех кодов ASCII в строке и вряд ли когда-либо сделает это.

Carl Smith 12.09.2019 12:25

Для поддержки всех UTF-16 (также не-BMP / дополнительные символы) из ES6 доступен метод строка.codePointAt ();

Этот метод представляет собой улучшенную версию charCodeAt, которая может поддерживать только кодовые точки Unicode <65536 (216 - один 16-битный).

Стоит отметить, что String.prototype.codePointAt() - это не поддерживается версиями Internet Explorer любой. (Однако он поддерживается в Edge.) Вы можете получить полифилл здесь.

mgthomas99 29.08.2017 16:36

JavaScript хранит строки как UTF-16 (двухбайтные), поэтому, если вы хотите игнорировать второй байт, просто удалите его с помощью побитового оператора & на 0000000011111111 (т.е. 255):

'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

зачем вам игнорировать второй байт?

Roberg 13.03.2017 13:19

Вопрос касается создания ASCII из строки UTF-16 (двухбайтовой). Рано или поздно вы получите коды, отличные от ascii, если не проигнорируете второй байт.

Steven de Salas 13.03.2017 14:24

@ Стивен де Салас - Ваше «решение» для получения не-ASCII-кодов для не-ASCII-символов - вернуть ASCII-код неправильный ??

Carl Smith 12.09.2019 12:21

@CarlSmith, не тот. Просто чтобы убрать компонент символа, отличный от ascii. Если вы работаете с одиночными байтами, это полезно. Однако вашему проекту может потребоваться другое решение.

Steven de Salas 14.09.2019 09:22

Вы можете ввести символ и получить код Ascii, используя этот код

Например, введите такой символ, как A Вы получаете код ASCII 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>

Чтобы обеспечить полную поддержку Unicode и обратимость, рассмотрите возможность использования:

'\n'.codePointAt(0);

Это гарантирует, что при тестировании символов, превышающих предел UTF-16, вы получите их истинное значение кодовой точки.

например

'?'.codePointAt(0); // 68181
String.fromCodePoint(68181); // '?'

'?'.charCodeAt(0);  // 55298
String.fromCharCode(55298);  // '�'

Также может быть полезно преобразовать специальный символ в шестнадцатеричную нотацию, поскольку некоторые текстовые редакторы могут работать неправильно, имея дело непосредственно с такими символами. Например: предупреждение (str.hexEncode (). HexDecode ());

Jose Tepedino 11.11.2019 05:55

str.charCodeAt(index)

Использование charCodeAt() В следующем примере возвращается 65, значение Unicode для A.

'ABC'.charCodeAt(0)// возвращает 65

Чтобы преобразовать строку в кумулятивное число:

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

console.info(stringToSum("A"));              // 65
console.info(stringToSum("Roko"));           // 411
console.info(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.info(`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;
}

Почему цифра «65»? Что это означает?

Reality 19.02.2021 19:58

-65 не является обязательным. Поскольку ASCII "A" числовой символ = 65. - 65 является необязательным, служит для получения первого символа ("A") как int 0.

Roko C. Buljan 19.02.2021 21:17

Другие вопросы по теме