САЙТЫ  ПОД  КЛЮЧ
ОНЛАЙН-СЕРВИСЫ СПРАВОЧНИКИ SEO-ИНСТРУМЕНТЫ РАЗВЛЕЧЕНИЯ

Справочник Javascript

charCodeAt

Синтаксис

var codepoint = string.charCodeAt(index)

Аргументы

index
целое число от 0 до длины строки-1

Описание, примеры

Юникодное значение от 0 до 1,114,111. Первые 128 значений Unicode совпадают с кодировкой ASCII.

Заметим, что charCodeAt() всегда возвращает значение, меньшее 65536. Это - из за того, что более высокие юникод-символы представлены парой вспомогательных псевдо-символов, которые вместе составляют реальный символ.

Из-за этого, чтобы получить полный символ для символов, юникод-значение которых больше или равно 65536, необходимо получить не только charCodeAt(0), но и charCodeAt(1) (как для строки из двух букв).

Пример:
Выделить все
function fixedCharCodeAt (str, idx) {
    var code = str.charCodeAt(idx);
    if (0xD800 <= code && code <= 0xDBFF) { 
        // Верхний вспомогательный символ
        var hi = code;
        var low = str.charCodeAt(idx+1);
        return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
    }
    if (0xDC00 <= code && code <= 0xDFFF) { 
       // Нижний вспомогательный символ
        var hi = str.charCodeAt(idx-1);
        var low = code;
        return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
    }
    return code;
}
alert(fixedCharCodeAt ('\uD800\uDC00', 0)); // 65536
alert(fixedCharCodeAt ('\uD800\uDC00', 1)); // 65536

charCodeAt() возвращает NaN, если указанный индекс меньше нуля или больше/равен длине строки.

Пример: Использование charCodeAt
// возвратит 65, unicode-код для А
"ABC".charCodeAt(0) // 65

Следующий пример предоставляет способ убедиться, что проход по циклу всегда дает целый символ, даже если строка содержит символы за пределами основного многоязычного набора.

Пример:
Выделить все
var str = 'A\uD800\uDC00Z' // 2 символа
// мы могли объявить сложный символ напрямую,
// т.к наш javascript-код имеет кодировку UTF.
for (var i=0, chr; i < str.length; i++) {
    if ((chr = getWholeChar(str, i)) === false) {
        continue // на позиции i вспомогательный символ
    } 
    // alert будет последовательно вызван для всех символов 
    alert(chr);
}
 
function getWholeChar (str, i) {
    var code = str.charCodeAt(i);
    if (0xD800 <= code && code <= 0xDBFF) { 
        // верхний вспомогательный
        if (str.length <= (i+1))  {
            throw 'High surrogate without following low surrogate';
        }
        var next = str.charCodeAt(i+1);
        if (0xDC00 > next || next > 0xDFFF) {
            throw 'High surrogate without following low surrogate';
        }
        return str[i]+str[i+1];
    }
    else if (0xDC00 <= code && code <= 0xDFFF) { 
       // Нижний вспомогательный
        if (i === 0) {
            throw 'Low surrogate without preceding high surrogate';
        }
        var prev = str.charCodeAt(i-1);
        if (0xD800 > prev || prev > 0xDBFF) {
            throw 'Low surrogate without preceding high surrogate';
        }
        return false; 
    }
    return str[i] // используем обращение к строке как к массиву
}

 

Это интересно

Каждую минуту 80 000 человек становятся друзьями в социальных сетях.


Наши реквизиты
WMID: 309688839848
WMR: R325885159214
E-mail: 
  BL:Бизнес-уровень [BL]
QR-код сайта
Онлайн-радио
Больше радиостанций