Преобразование символа в ASCII код в JavaScript
Как преобразовать символ в его ASCII-код с помощью JavaScript?
У меня есть задача, в которой нужно получить ASCII-код символа. Например, я хотел бы получить значение 10 для символа "\n"
(перевод строки).
Есть ли способ сделать это в JavaScript? Спасибо!
5 ответ(ов)
Если у вас есть только один символ, а не строка, вы можете использовать:
'\n'.charCodeAt();
'\n'.codePointAt();
При этом ноль можно опустить...
Раньше это было значительно медленнее, чем 'n'.charCodeAt(0)
, но я протестировал это и теперь не вижу никаких различий (выполнил 10 миллиардов раз с и без нуля). Тестировалось только в Chrome и Firefox.
Хотя другие ответы верные, я предпочитаю такой способ:
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);
Для тех, кто хочет получить сумму всех ASCII кодов в строке, вы можете использовать следующий код:
'Foobar'
.split('')
.map(char => char.charCodeAt(0))
.reduce((current, previous) => previous + current)
Или, используя синтаксис ES6:
[...'Foobar']
.map(char => char.charCodeAt(0))
.reduce((current, previous) => previous + current)
В первом варианте мы сначала разбиваем строку на массив символов, затем преобразуем каждый символ в его ASCII код с помощью charCodeAt(0)
и в конце складываем все коды с помощью reduce
. Во втором варианте используется оператор распространения (...
), который упрощает процесс получения массива символов из строки. Оба подхода достигают одной и той же цели.
Чтобы обеспечить полную поддержку Unicode и обратимость, рекомендуется использовать следующий код:
'\n'.codePointAt(0);
Это обеспечит правильное получение истинного значения кодовой точки при тестировании символов, превышающих предел UTF-16.
Например:
'𐩕'.codePointAt(0); // 68181
String.fromCodePoint(68181); // '𐩕'
'𐩕'.charCodeAt(0); // 55298
String.fromCharCode(55298); // ''
Важно помнить, что codePointAt
возвращает значение кодовой точки символа, в то время как charCodeAt
дает значение кодовой единицы UTF-16, что может привести к неоднозначным результатам для символов, представляющих кодовые точки выше 0xFFFF.
Для преобразования строки в массив (поток) UTF-8 в JavaScript вы можете использовать TextEncoder
. Вот пример кода, который показывает, как это сделать:
const str_to_arr_of_UTF8 = new TextEncoder().encode("Adfgdfs");
// Результат: Uint8Array [65, 100, 102, 103, 100, 102, 115]
Важно отметить, что ASCII является подмножеством UTF-8, поэтому это решение будет универсальным для строк, состоящих из ASCII-символов. При использовании этого метода, вы получаете Uint8Array
, где каждый элемент представляет собой байт, который соответствует символу в строке.
Где найти документацию по форматированию даты в JavaScript?
В чем разница между String.slice и String.substring?
Проверка соответствия строки регулярному выражению в JS
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"