Как получить правильный элемент из строки Unicode? - PullRequest
0 голосов
/ 31 мая 2019

Я хочу получить конкретные буквы из строки Unicode, используя индекс. Тем не менее, он не работает, как ожидалось.

Пример:

var handwriting = `????????????????????????????????????????????????????1234567890`
var normal = `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890` 

console.log(normal[3]) // gives 'd' but
console.log(handwriting[3]) // gives '�' instead of '?'

также длина не работает должным образом normal.length дает правильное значение как 62 , но handwriting.length дает 114.

Индексирование не работает должным образом. Как я могу получить доступ к элементам массива Unicode?

Я пробовал это на python, он отлично работает, но в Javascript он не работает.

Мне нужны точные символы из строки Unicode, такие как ожидаемый вывод 'd' '?' для индекса 3

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Символ Юникода выглядит как '\ u00E9', поэтому, если ваша строка длиннее, это нормально.Чтобы иметь реальную длину строки Unicode, вы должны преобразовать ее в массив:

let charArray = [...handwriting]
console.log(charArray.length) //=62

Каждый элемент вашего массива является символом вашей строки.charArray [3] вернет вам символ unicode, соответствующий '?'

2 голосов
/ 31 мая 2019

В Javascript строка представляет собой последовательность 16-битных кодовых точек.Поскольку эти символы кодируются над базовой многоязычной плоскостью, это означает, что они представлены парой кодовых точек, также известных как суррогатная пара.

Ссылка

Unicode номер ? равен U+1D586.И 0x1D586 больше, чем 0xFFFF (2 ^ 16).Итак, ? представлен парой кодовых точек, также известных как суррогатная пара

console.log("?".length)
console.log("?" === "\uD835\uDD86")

Один из способов - создать массив символов с использованием синтаксиса расширения или Array.from(), а затем получить необходимый индекс

var handwriting = `????????????????????????????????????????????????????1234567890`

console.log([...handwriting][3])
console.log(Array.from(handwriting)[3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...