Executando verificação de segurança...
2

Hugo, tava revisando o que eu sabia sobre Unicode nestes últimos dias e voltei
mais uma vez nesta sua publicação, que está incrivelmente boa e cheia de
referências.

Acontece que dessa vez notei 2 pontos que eu acho que estão imprecisos. Vou
apresentar meu ponto de vista e vc me diz o que acha, beleza?

Primeiro, sobre esta parte:

... e neste encoding os emojis usam mais de 1 byte ...

Esta afirmação não faz sentido porque, seja em UTF-16 ou UCS-2, todos os caracteres usam mais de 1 byte já que cada code unit tem exatamente 2 bytes.

E o segundo é sobre esta parte aqui:

Enfim, isso explica porque em Python o tamanho da string é 13 e em JavaScript
é 16. Um considera a quantidade de code points, o outro guarda a string
internamente em UTF-16 e considera a quantidade de bytes resultantes. E um
caractere pode ser formado por mais de um code point.

Como vc bem explicou, code points acima do BMP são codificados usando um par de
surrogates code points.

E como eu disse acima, todo caracter em UTF-16 ocupa, pelo menos, 2 bytes.

Sendo assim, pelo que observei, JavaScript não considera a quantidade de bytes,
mas sim de code units.

Sobre isso a especificação no diz o seguinte:

The String type is the set of all ordered sequences of zero or more 16-bit
unsigned integer values (“elements”) up to a maximum length of 253 - 1
elements.

E:

...in which case each element in the String is treated as a UTF-16 code unit
value.

Fonte:
https://262.ecma-international.org/14.0/#sec-ecmascript-language-types-string-type

E são esses meu pontos. Obrigado por compartilhar conhecimento!

Carregando publicação patrocinada...
2