Runes, Invalid argument(s): string is not well-formed UTF-16

세현·2024년 7월 25일
0

flutter

목록 보기
1/2

오늘은 플러터가 제공하는 타입중 runes에 대해 알아보려고 한다.

알아보려는 이유는 프로젝트를 진행하면서 있었던 일로 인해서 궁금중이 생겨서이다.

서버에서 통신을 통해 문자열을 받아와서 한글자씩 추가해주면서 보여주려고 했는데, 통신받은 문자열에 이모티콘이 포함된 경우에는

Invalid argument(s): string is not well-formed UTF-16

출력시킬 문자열에 이모티콘이 추가될 경우 해당 에러가 발생했다.

찾아보니 Dart의 문자열은 UTF-16 코드 단위의 시퀀스이기 때문에 문자열 내에서 유니코드 코드 포인트를 표현하려면 특별한 문법이 필요하다고 합니다.

여기에 접근하기 전에 우선 runes에 대해 먼저 알아보려고 합니다.

runes

Dart에서 runes는 문자열의 유니 코드 포인트를 나타낸다고 합니다.

또한 characters package를 사용하여 사용자가 인식하는 문자를 보거나 조작할 수 있습니다.

우선, 이모티콘이 추가된 문자열과 아닌 문자열의 길이를 비교해보면 생각과는 다르게 흘러가는 점을 발견했습니다. 이모티콘 2개가 추가되어있기 때문에 msg의 길이가 2가 더 높을 것이라고 생각했는데 5정도 차이나는것을 볼 수 있습니다.

msg.runes를 통해서 문자열의 문자 유니코드 코드 포인트들을 확인 할 수 있었습니다.

runes를 해석해주는 공식문서의 코드를 사용하여 이모지와 a인 소문자의 유니코드를 확인해볼 수 있었습니다.
이모지는 두가지의 유니코드를 결합해서 사용한다는 점을 알 수 있었습니다.

해서 우선적으로, String.fromCharCode(rune) 을 넣으면 해당 문자를 반환해주는 것을 확인했고
기존에 문자열의 인덱스에 접근해서 문자열을 추가했던 방식과 달리 runes를 이용해서 해보려고 합니다.

위의 사진은 임시로 test했던 장면입니다.

참고 사이트 : https://api.flutter.dev/flutter/dart-core/Runes-class.html

profile
안녕하세요

0개의 댓글

관련 채용 정보