메인 콘텐츠로 건너뛰기
이 페이지에서는 트윗 작성 및 X API 전반에서 문자가 어떻게 처리되는지 설명합니다. 구현 세부 정보는 X에서 제공하는 오픈 소스 twitter-text 라이브러리를 참고하세요. 이 라이브러리는 GitHub에서 확인할 수 있습니다.

배경

X는 SMS 기반 텍스트 서비스로 시작했습니다. 이로 인해 초기 트윗 길이는 140자로 제한되었는데(이는 부분적으로 SMS의 160자 제한 때문이며, 20자는 명령어와 사용자 이름에 할당되었습니다), 시간이 지나 X가 발전함에 따라 최대 트윗 길이는 280자로 늘어났습니다. 여전히 짧고 간결하지만 더 많은 표현이 가능해졌습니다.

문자 정의

대부분의 경우 Tweet 텍스트에는 최대 280개의 문자 또는 Unicode 글리프를 포함할 수 있습니다. 일부 글리프는 한 글자보다 더 크게 계산됩니다. 특정 글리프가 한 글자인지 그 이상으로 계산되는지를 가중치라고 합니다. 어떤 문자가 한 글자보다 큰 가중치를 갖는지에 대한 정확한 정의는 twitter-text Tweet 파싱 라이브러리구성 파일에 있습니다. 현재 버전의 구성 파일은 기본 두 글자 가중치와, 가중치가 다르게 적용되는 Unicode 코드 포인트의 네 가지 범위를 정의합니다. 현재 이 범위의 코드 포인트는 모두 한 글자로 계산됩니다.
  • 첫 번째 범위는 Latin-1 코드 페이지 전반의 문자를 포함합니다 (U+0000 - U+10FF).
  • 두 번째 범위는 Zero Width Joiner(이모지 및 기타 글리프 결합에 사용됨)를 포함한 일반 구두점을 포괄합니다 (U+2000-U+200D).
  • 세 번째 범위는 Unicode 방향 표식인 U+200E 및 U+200F를 제외한 일반 구두점입니다 (U+2010-U+201F).
  • 마지막 범위는 따옴표 문자 범위를 포함합니다 (U+2032-U+2037).
twitter-text 라이브러리가 계산한 Tweet 텍스트와 길이의 예시는 라이브러리의 validate.yml 테스트 구성 파일에서 확인할 수 있습니다. 예시
표시된 문자길이설명Unicode 시퀀스
a1라틴 소문자 aU+0061
á1악센트가 있는 라틴 소문자 aU+00E1
ӑ1브레브가 있는 키릴 소문자 aU+04D1
1서컴플렉스와 악센트가 있는 라틴 문자 oU+1ED2

이모지

twemoji에서 지원하는 이모지는 결합 수정자의 유무와 관계없이 항상 두 글자로 계산됩니다. 여기에는 Fitzpatrick 피부 톤 또는 성별 수정자로 변경된 이모지도 포함되며, 유니코드 코드 포인트가 훨씬 더 많더라도 동일합니다. 이모지 가중치는 twitter-text의 정규표현식으로 정의되며, 표준 이모지에 하나 이상의 유니코드 Zero Width Joiner(U+200D)가 결합된 시퀀스를 찾습니다. 예시
표시된 이모지길이설명유니코드 시퀀스
👾2알려진 이모지의 기본 길이
🙋🏽2피부 톤 수정자가 있는 이모지🙋 U+1F64B, 🏽 U+1F3FD
👨‍🎤2결합 글리프(제로 폭 조이너)를 사용하는 이모지 시퀀스👨 U+1F468, U+200D, 🎤 U+1F3A4
👨‍👩‍👧‍👦2여러 결합 글리프(제로 폭 조이너)를 사용하는 이모지 시퀀스👨 U+1F468, U+200D, 👩 U+1F469, U+200D, 👧 U+1F467, U+200D, 👦 U+1F466

중국어/일본어/한국어 글리프

CJK(중국어/일본어/한국어) 언어에서 사용되는 글리프는 두 글자로 계산됩니다. 따라서 CJK 텍스트만으로 이루어진 트윗은 이러한 유형의 글리프를 최대 140개까지만 포함할 수 있습니다.

엔터티 객체

트윗에는 엔터티 객체가 포함될 수 있으며, 이 중 일부는 트윗 길이에 영향을 줍니다. URL: 모든 URL은 t.co 링크로 감싸집니다. 이는 URL의 길이가 twitter-text 구성 파일transformedURLLength 매개변수로 정의됨을 의미합니다. 트윗 내 URL의 현재 길이는 실제 URL이 더 짧더라도 23자로 계산됩니다. 답글: 답글 트윗 시작 부분에 자동으로 채워지는 @이름은 글자 수 제한에 포함되지 않습니다. 새로 작성하는 비-답글 트윗이 @멘션으로 시작하는 경우에는 포함되며, 사용자가 트윗 본문에 명시적으로 추가한 @멘션도 포함됩니다. 미디어: 공식 클라이언트에서 게시된 경우 pic.x.com URL로 표시되는, 트윗에 첨부된 미디어는 글자 수 0으로 계산됩니다. 엔터티 객체에 대한 자세한 내용은 개발자 문서를 참고하세요.

X 문자 인코딩

X API 엔드포인트는 UTF-8로 인코딩된 텍스트만 허용합니다. 다른 모든 인코딩은 텍스트를 API로 보내기 전에 UTF-8로 변환해야 합니다. X는 텍스트의 NFC(Normalization Form C) 버전을 사용해 트윗 길이를 계산합니다. 예: 단어 “café”. 겉보기와 발음은 같지만, 사용하는 바이트 수가 다른 두 가지 바이트 시퀀스가 있습니다.
café0x63 0x61 0x66 0xC3 0xA9”é” 문자, 즉 “조합된 문자(composed character)”를 사용
café0x63 0x61 0x66 0x65 0xCC 0x81결합 분음 부호를 사용하여 “e” 위에 겹침
Normalization Form C는 장형(0x65 0xCC 0x81)보다 완전 결합 문자(café 예시의 0xC3 0xA9) 사용을 선호합니다. X는 UTF-8 바이트 수가 아니라 텍스트의 코드 포인트 수를 계산합니다. café 예시의 0xC3 0xA9는 UTF-8에서 두 바이트로 인코딩되는 하나의 코드 포인트(U+00E9)인 반면, 0x65 0xCC 0x81는 세 바이트로 인코딩되는 두 개의 코드 포인트입니다.