๋ง์กฑ
[Javascript] ์จ๋ก๊ฒ์ดํธ ํ์ด(surrogate pair) ๋ณธ๋ฌธ
[Javascript] ์จ๋ก๊ฒ์ดํธ ํ์ด(surrogate pair)
FrontEnd/Web Satisfaction 2024. 6. 9. 20:29const str= '๐
';
console.log(str.length);
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ฝ์์๋ ์ด๋ป๊ฒ ํ์๋ ๊น?
'1๊ธ์๋๊น 1์ด๊ฒ ์ง' ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง 2๊ฐ ํ์๋๋ค.
์ ์ด๋ ๊ฒ ํ์๋๋์ง ์์๋ณด์
์จ๋ก๊ฒ์ดํธ ํ์ด (surrogate pair)
๊ธฐ๋ณธ์ ์ผ๋ก js์์ string์ UTF-16์ผ๋ก ๋ค๋ค์ง๋ค.
UTF-16์ ๋ฌธ์๋ฅผ ํํํ ๋ 2๋ฐ์ดํธ ๋๋ 4๋ฐ์ดํธ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
ํ๊ตญ์ด ๋ฌธ์(๊ฐ, ๋, ๋ค...)๋ 2๋ฐ์ดํธ๋ก ํํ์ด ๊ฐ๋ฅํ์ง๋ง
์ผ๋ถ ํ์๋ ์ด๋ชจ์ง ๋ฑ์ 2๋ฐ์ดํธ๋ก ํํ์ด ๋ถ๊ฐ๋ฅํด 2๋ฐ์ดํธ๋ฅผ ๋ ์ฌ์ฉํด์ผ ํ๋ค,
๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ 2๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋,
2๋ฐ์ดํธ๋ก ํํ ๊ฐ๋ฅํ ๋ฒ์ ๋ฐ๊นฅ์ ๋ฌธ์์ด๋ค์ 2๋ฐ์ดํธ๋ฅผ ๋ ์ฌ์ฉํ์ฌ ํํํ๋ค.
๋ ๊ธ์๋งํผ์ ๊ณต๊ฐ์ ํ ๊ธ์๋ฅผ ํํํ๋๋ฐ ์ฌ์ฉํ๋ ์ด๊ฒ์ ์จ๋ก๊ฒ์ดํธ ํ์ด(surrogate pair)๋ผ๊ณ ํ๋ค.
const str= '๐
'; //์จ๋ก๊ฒ์ดํธ ํ์ด๋ 4๋ฐ์ดํธ(๊ธฐ๋ณธ ํฌ๊ธฐ์ 2๋ฐฐ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ํํํ๋ฏ๋ก
console.log(str.length); //1๊ธ์์ฒ๋ผ ๋ณด์ด์ง๋ง length๋ 2๊ฐ ๋๋ค
์จ๋ก๊ฒ์ดํธ ํ์ด ๋ค๋ฃจ๊ธฐ
ํ ๊ธ์์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๊ธธ์ด๋ 2๊ธฐ ๋๋ฌธ์ ์จ๋ก๊ฒ์ดํธ ํ์ด๊ฐ ํฌํจ๋ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋์๋ ์ ์ํด์ผ ํ๋ค.
const str= '๐
๊ฐ๋๋ค';
for(let i=0; i< str.length; i++){
console.log(str[i]);
}
์์ฒ๋ผ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด ๋ด๋ถ๋ฅผ ๋ฐ๋ณตํ๋ฉด ์จ๋ก๊ฒ์ดํธ ํ์ด๋ฅผ ๊ณ ๋ คํด์ฃผ์ง ๋ชปํด
๊ธฐ๋ณธ ํฌ๊ธฐ์ธ 2๋ฐ์ดํธ๋ก ๋ฌธ์๊ฐ ์๋ฆฌ๊ฒ ๋๋ค.
๐ ๋ 4๋ฐ์ดํธ, ์ฆ 2๊ธ์ ๋งํผ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก
๋ฐ์ดํธ๊ฐ ์ ๋ฐ์ฉ ์๋ ค๋๊ฐ console.log์ ๋ค์ด๊ฐ๋ค.
์ฌ๋ฐ๋ฅด๊ฒ ๋ฌธ์์ด ๋ด๋ถ๋ฅผ ๋ฐ๋ณตํ๋ ค๋ฉด ์ผ๋ฐ for ๋์ for-of๋ฅผ ์ฌ์ฉํ ์ ์๋ค
const str= '๐
๊ฐ๋๋ค';
for(const char of str){
console.log(char);
}
์ด์ธ์ String ๋ฉ์๋์์ index๋ฅผ ์ด์ฉํด ๋ค๋ฃจ๋ ํจ์์์๋ ์จ๋ก๊ฒ์ดํธ ํ์ด๋ ๊ณ ๋ ค๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
๋จ๋ ์จ๋ก๊ฒ์ดํธ
String.prototype.isWellFormed()๋ก ํ์ฌ string์ด ์ ์์ ์ธ ๋ฐ์ดํธ ํจํด์ ๊ฐ์ง๊ณ ์๋ ๋ฌธ์์ธ์ง ํ์ ํ ์ ์๋ค.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/isWellFormed
const str= '๐
๊ฐ๋๋ค';
for(let i=0; i< str.length; i++){
if(!str[i].isWellFormed()){
console.error('this string is not wellFormed');
}
console.log(str[i]);
}
isWellFormed() ๊ฐ false๋ผ๋ฉด ์จ๋ก๊ฒ์ดํธ ํ์ด๊ฐ ๊นจ์ก๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
2๊ธ์๋งํผ์ ๊ณต๊ฐ์ด 1๊ธ์๋ฅผ ํํํ๋ ๋ฐ ์ฌ์ฉ๋์์ด์ผ ํ์ง๋ง 1๊ธ์๋ถ์ ๋ฐ์ดํธ(lone surrogate)๋ง ํฌํจ๋์๋ค๋ ๊ฒ์ด๋ค.
'FrontEnd > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] ์ด๋ฏธ์ง ํฌ๊ธฐ ์ง์ ๊ณผ ์ ๋์ผ์ค ์ต์ ํ๋ก CLS(Cumulative Layout Shift) ์์น ๋ฎ์ถ๊ธฐ (0) | 2023.03.01 |
---|---|
[Javascript] ๋ธ๋ผ์ฐ์ ์์ import/export ์ฌ์ฉํ๊ธฐ (0) | 2022.01.31 |
CORS(Cross Origin Resource Sharing)์ ์ดํด (0) | 2022.01.01 |
[Javascript] ๋คํธ์ํฌ ๋๊น/์ฐ๊ฒฐ ๊ฐ์ง (0) | 2020.11.04 |
[Javascript] REST API ํธ์ถ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, axios (2) | 2020.01.19 |