let a=["😍"] ; sea b="😍"
consola.log(a[0],b,b.charAt(0))
"😍" "😍" "�"
este charAt imprime un signo de interrogación... ¿alguien puede aclararme cómo obtener el ícono utf8 con charAt en una cadena?
Los emojis se representan usando múltiples bytes:
let b="😍" console.log(b.length) Con charAt solo obtienes una parte del emoji.
Con codePoint puede obtener:
un entero no negativo que es el valor del punto de código Unicode en la posición dada.
Sin embargo, necesita saber dónde comienza el emojii, porque el índice en sí todavía se refiere a los bytes:
let b="😍👆👍" console.dir(String.fromCodePoint(b.codePointAt(0))); console.dir(String.fromCodePoint(b.codePointAt(2))); Puede dividir su cadena usando el operador de propagación ... y luego acceder al carácter visible en cuestión usando el índice. Esto funciona porque el iterador usa puntos de código y no bytes individuales.
let b="😍test👆test👍" function splitStringByCodePoint(str) { return [...str] } console.log(splitStringByCodePoint(b)[5]) Pero eso no funcionará con emojis como 👆🏽 porque consisten en 👆 + byte(s) que representan la variación (color).
let b="👆🏽" console.log(b.length) function splitStringByCodePoint(str) { return [...str] } console.log(splitStringByCodePoint(b)) console.log(String.fromCodePoint(b.codePointAt(0))); console.log(String.fromCodePoint(b.codePointAt(2)));Si desea admitir todos los emojis, actualmente necesita escribir su propio analizador o buscar una biblioteca que lo haga.