같은 문자열의 바이트 수
영문 ASCII 문자는 UTF-8에서 한 바이트로 표현된다. 여러 한글 음절은 세 바이트를 사용하며 기본 다국어 평면 밖의 많은 문자는 네 바이트를 사용한다.
모든 한글처럼 보이는 글자가 정확히 세 바이트라는 뜻은 아니다. 자모가 조합된 표현이나 여러 코드 포인트로 이루어진 글자는 전체 바이트 수가 달라진다.
중간에서 자르면 생기는 문제
하나의 코드 포인트가 여러 바이트일 수 있어 임의의 바이트 위치에서 자르면 잘못된 UTF-8이 생길 수 있다. 유효한 바이트 경계를 찾는 것과 시각적인 글자 경계를 찾는 것도 별개다.
결합 문자와 이모지 조합을 온전하게 보존하려면 문자소 단위의 처리도 필요할 수 있다. 사용 목적에 맞는 문자열 라이브러리를 선택해야 한다.
인코딩을 맞추는 경로
파일과 HTTP 응답, 데이터베이스 연결이 서로 다른 인코딩을 가정하면 같은 바이트가 다른 문자로 해석될 수 있다. 올바른 선언과 실제 바이트가 일치해야 한다.
이미 잘못 해석한 문자열을 다시 UTF-8로 저장한다고 원래 문자가 자동으로 복구되지는 않는다. 어느 단계에서 어떤 해석이 적용됐는지 추적해야 한다.
유효성 검증과 문자 의미
UTF-8에는 잘못된 연속 바이트와 금지된 코드 포인트 표현을 배제하는 규칙이 있다. 디코더가 잘못된 입력을 거절하거나 대체하는 정책은 응용 동작에 영향을 준다.
유효한 UTF-8이라는 사실이 내용의 안전성이나 시각적 구별 가능성을 보장하지는 않는다. 비슷하게 보이는 문자와 제어 문자 등은 별도의 사용 규칙으로 다뤄야 한다.