이 단어의 한글 뜻인 두부에 대한 내용은 두부(동음이의어) 문서 참고하십시오.
1. 개요
Tofu는 장치에 글자를 표시하기 위한 글리프/글꼴이 없다는 것을 나타내기 위한 작은 상자를 의미한다. 모양은 위 이미지와 같이 네모박스안 엑스자로 나타나며, 엑스자는 생략되는 경우도 있다. 파이어폭스에서는 네모 상자 안에 해당 문자의 코드 포인트가 16진수로 나타나며 일부 기종에서는 네모 안 ?로 나타나기도 한다. 하필 tofu(두부)인 이유는 흔히 연상하기 쉬운 '네모난 물건'이 두부이기 때문.
글리프가 문자에 배당되어 있으나 렌더링하지 못하는 경우 네모 상자 안에 빗금을, 유니코드 상 애초에 문자가 배당되지 않아 렌더링할 수 없는 경우 네모 상자에 X로 표시하는 경우도 있다.
주로 흔히 사용하지 않는 특수기호, 한자, 이모티콘 등에서 발생한다. 일반적으로 사용 중인 폰트에 해당 글리프가 없으면 굴림체 같은 시스템 폰트로 Fallback 해서 보여주는데, 그 시스템 폰트로도 지원하지 않는 문자일 경우 tofu로 보이게 된다. 유니코드에서 최근에 제정한 각종 이모지를 인스타그램 같은 소셜미디어에 적었을 때, 이를 보는 구형 휴대전화에서도 tofu가 나타난다.
폰트파일 하나에는 6만5천여자의 글자(글리프)를 넣을 수 있는데, 이 이상 넘어가는 영역의 문자는 해당 폰트가 지원할 수가 없다. 다른 폰트로 fallback 해야만 한다. 모든 글리프를 지원하는 폰트파일을 만들면 만드는데 시간과 노력도 들고 그 파일도 어마어마하게 커진다. 폰트 디자이너가 고객(자국 국민)이 사용하는 문자들을 고려한다면 세상 모든 폰트를 만들 필요는 없기 때문에 적당히 일부분만 효율적으로 폰트파일을 만들다 보면, 외국어를 넘나드는 상황에서 폰트가 fallback하는 상황이 흔히 일어나곤 한다. 이러한 상황에서 tofu는 흔히 나타날 여지가 있다.
2. tofu에 대처하는 폰트
2.1. Noto 폰트
글자가 컴퓨터에서 렌더링될 때, '두부'로 표시되는 것을 줄이기 위해 구글은 모든 언어가 조화롭게 보이는 것을 목표로 Noto 글꼴 패밀리를 개발하였다. Noto라는 이름은 '더 이상 두부 없는(No Tofu)'이라는 Google의 목표를 의미한다고 한다. 이중 한중일을 지원하는 폰트 패밀리는 Source Han Sans(Noto Sans CJK)이다.그러나 Noto 글꼴 안내페이지에서 볼 수 있듯이[1], Noto 글꼴은 모든 '두부'를 없애지 못한다. 즉 Noto 글꼴은 tofu에 대한 완벽한 대책이 아니다. 유니코드 14.0이 출시되었을 때 기준으로 Github에서 밝힌 바에 따르면, 한자권 문자를 제외하면 95%의 유니코드 문자만 지원되며[2] 한자권 문자의 경우는 자주 쓰는 33%만의 한자가 정상적으로 지원된다. 거꾸로 말하자면, Noto 글꼴을 썼을 시 유니코드에 있는 전체 한자 중 대략 67%의 한자는 tofu로 표시된다는 뜻이다. 단순히 여러 한자를 만드는 것이 힘들 뿐만이 아니라 기술적 한계 때문이기도 한데, 한 폰트 안에서 표시할 수 있는 글리프의 개수의 한계는 65535개다. 유니코드 등록된 숫자만 10만 자가 넘어가는 한자 전부를 담아내기에는 턱없이 부족한 숫자이다. 때문에 Noto 글꼴을 개발하는 측에서는 인명용 한자 등 자주 사용하는 한자 33%만 지원하기로 한 것이다.[3] 따라서 이 미지원문자들을 제대로 지원하는 Noto 이외의 글꼴을 찾거나[4] 아니면 아래의 대책을 써야 한다.
2.2. Unicode BMP Fallback 폰트
디버깅용 Fallback 폰트로서, 네모칸에 유니코드 숫자만 적혀있는 폰트(?)이다.#tofu에 해당 문자의 코드가 적혀있어 폰트 디자이너나 개발자에게 보다 영양가 있는 정보를 보여준다.
2.3. Last Resort 폰트
유니코드 컨소시엄에서 제공하는, 라스트 리조트 이름 그대로 '마지막 수단[5]'을 자처하는 Fallback font이다.Github 지원하는 글리프컴퓨터에 특정 폰트가 설치되지 않아(외국어, 특수문자 등) 해당 문자를 표시하지 못하고 tofu를 보여줄 상황에서, 이 '마지막 수단'으로 fallback하여 문자를 표시해줌과 동시에 이 문자가 어떤 문자인지 알려준다. 사용자에게 현재 사용하는 폰트에서 해당 글자를 지원하지 않음을 알려주는 동시에, 사용되고 있는 문자가 무엇인지 코드(유니코드 코드포인트)와 함께 보다 영양가 있는 정보를 보여준다.
폰트 디자인은 i) 정사각형 틀로 둘러싸여져 있고, ii) 가운데에는 글자(심볼)를, iii) 테두리에는 글자 정보(그룹, 이름, 코드)를 보여준다.
3. 관련 문서
[1] 대부분의 유니코드 문자를 글꼴에서 지원하기에 대부분 초록색 칸으로 나오나, 중간중간에 글꼴에서 지원하지 않는 빨간 칸이 조금씩 존재한다.[2] 거꾸로 말하면 5%의 유니코드 문자는 Noto글꼴에서 제대로 지원하지 않는다. 대표적으로 카위 문자의 경우 Noto 글꼴에서 지원하지 않아 tofu로 나왔었다. 다만 Noto 글꼴이 업데이트 됨에 따라 2023년 기준으로 Noto Sans Kawi라는 글꼴을 새로 만들게 되어 카위 문자도 tofu가 아니라 제 모습이 나오게 되었다. 이처럼 Noto 글꼴 개발을 주도하고 진행하는 구글 측에서는 이 5%밖에 안되는 미지원문자들이 얼마 안되기 때문에 우선적으로 지원하도록 업데이트하는 추세를 보이고 있다.[3] 그나마 다행인 사실은, Noto 글꼴에서 한글은 100% 제대로 출력된다는 것. 한국에서만 쓰는 문장기호 등을 제대로 지원하는 것은 물론이고, 유니코드 방식의 옛한글까지 제대로 지원한다.[4] 한자의 경우, Noto 글꼴의 일부인 본고딕에 Plangothic이라는 글꼴을 추가적으로 쓰면 모든 유니코드 한자를 볼 수 있는 식이다. 참고로 최신 Noto 글꼴 + Plangothic 조합이면 거의 모든 유니코드 문자를 볼 수 있다. 아쉽게도 모든 유니코드 문자를 볼 수 있지는 않은데, 최신 유니코드가 발표되고 Noto 글꼴에서 이를 알아내어 글꼴을 만들고 대중에게 공개되어 글꼴이 업데이트되는데 시간이 수 년 정도가 소요되기 때문이다.[5] The Last Resort. 마지막 휴게소 아니다. '최후의 수단' 같은 있어보이는 이름이지만 의역하면 "궁여지책"으로 읽을 수도 있다.