일본어 글꼴과 문자의 함정 ── 업무 앱에서 JIS2004, IVS, 외자를 다루기

· · 일본어 글꼴, JIS2004, 이체자, 외자, 문자 코드, Unicode, 업무 앱, 전표, Windows

「고객 명단의 葛 자가 화면과 인쇄 전표에서 달라 보인다. 고객이 데이터가 깨진 것 아니냐고 항의했다」── 업무 시스템 유지보수에서 이런 상담은 드물지 않습니다. 또 하나는 「관공서에 제출하는 서류에서 인명 문자가 표시되지 않는다. 옛 PC에서는 표시되던 것이, 교체 뒤에는 □가 되었다」입니다.

둘 다 현장에서는 「문자 깨짐」이라 불리기 쉽지만, 인코딩 불일치에서 오는 문자 깨짐과는 다른 문제입니다. 전자는 데이터의 한 비트도 바뀌지 않고 외관만 바뀐 것이고, 후자는 그 PC에만 있던 「외자」가 사라진 것입니다.

흔한 두 상담의 정체화면과 전표에서 葛의 모양이 다르다는 상담은 데이터는 같고 외관만 바뀐 경우이고, PC 교체 뒤 □가 되었다는 상담은 그 PC에만 있던 외자가 사라진 경우이며, 둘 다 인코딩 불일치 문자 깨짐과는 다른 문제이다상담 1: 화면과 전표의 모양이 다름데이터는 그대로, 외관만 바뀜상담 2: 교체 뒤 □가 됨그 PC에만 있던 외자가 사라짐인코딩 문자 깨짐과는 다른 문제

그림 1: 「문자 깨짐」이라 불리기 쉬운 두 상담은 둘 다 인코딩 불일치와는 다른 문제이다.

이 글의 약속은 단순합니다. 문자 코드(데이터) 층과 글꼴(외관) 층을 나누면, 대부분의 일본어 문자 문제는 다루기 쉬워집니다. JIS2004 글리프 변경, 이체자 선택자(IVS), 외자(EUDC)부터 정부의 문자 기반, 글꼴 선택과 임베드까지, 업무 시스템 개발자와 IT 담당자가 판단에 쓸 수 있는 형태로 정리합니다.

Shift_JIS ↔ UTF-8 변환에서 일어나는 「문자 깨짐」자체는 기존 기사에서 다루므로, 이 글은 「코드는 왕복이 맞는데, 외관이나 표시 가능 여부가 어긋나는」문제에 집중합니다.

1. 먼저 결론

  • 「문자 깨짐」과 「글리프가 다르다」는 다른 문제입니다. 문자 깨짐은 바이트 열을 잘못 해석한 데이터 층의 사고이고, 글리프 차이는 글꼴이 가진 글리프의 차이인 외관 층의 사고이며, 대책은 완전히 다릅니다.
  • 같은 Unicode 코드 포인트라도, 표시되는 글리프는 글꼴에 따릅니다. JIS X 0213:2004는 葛, 辻, 飴 등 168자의 예시 글리프를 인쇄 표준 형태로 개정했고, Windows도 Vista부터 MS Gothic / MS Mincho에서 JIS2004 글리프를 기본으로 삼았습니다.12
  • 글리프를 데이터로 고정하는 표준 수단은 이체자 선택자(IVS)입니다. 기본 문자와 U+E0100 이후 선택자의 열로 글리프를 지정하며, Adobe-Japan1, Hanyo-Denshi, Moji_Joho(문자정보기반) 같은 컬렉션이 Unicode IVD에 등록되어 있습니다.34
  • 비대응 환경에서 IVS의 사양상 동작은 선택자를 무시하고 기본 문자의 기본 글리프를 표시하는 것입니다. 다만 IVS를 포함한 한 문자는 UTF-16에서 최대 4코드 유닛이 되므로, 문자 수와 슬라이스 구현에 주의가 필요합니다.5
  • 외자(EUDC)의 운명은 「그 PC에서만 표시된다」입니다. 사용자 정의 영역 코드 포인트에는 합의된 의미가 없고, eudc.tte에 등록한 글리프는 다른 PC, 메일, PDF로 가지 않습니다.67
  • 인명을 다루는 시스템은 받아들이는 문자 집합을 정해 밝혀야 합니다. 정부 측은 호적통일문자와 문자정보기반을 바탕으로, 표준에 맞는 시스템이 「행정사무표준문자」를 쓰는 쪽으로 움직이고 있습니다.8910
  • 전표와 PDF에서는 「글꼴을 화면과 맞추고, 임베드한다」가 기준입니다. 임베드가 허용되는지는 글꼴의 라이선스(fsType)가 정하고, 장기 보존 PDF/A는 글꼴 임베드를 요구합니다.1112
  • 인명 데이터에 정규화(NFKC)를 함부로 적용하지 마십시오. 전각·반각 통일과 호환 문자 치환은 지켜야 할 구분을 잃습니다.13

한 문장으로 「어느 바이트 열을 저장하는가」는 데이터 설계 문제이고, 「어떻게 보이는가」는 글꼴 설계 문제입니다. 둘을 섞어 논의하면, 고칠 수 있던 문제도 고칠 수 없게 됩니다.

2. 데이터와 외관을 따로 생각하기 ── 코드 포인트와 글리프

Unicode에서 문자는 코드 포인트라는 숫자로 표현됩니다. 葛는 U+845B이며, 이 숫자는 모든 PC에서 같습니다. 반면 그 숫자를 화면이나 종이에 그리는 방법은 글꼴이 가진 글리프가 정합니다. 같은 U+845B가 글꼴 A와 글꼴 B에서 세부가 다른 것은 정상 동작입니다.

이 두 층을 전제로 하면, 현장 증상은 다음과 같이 나눌 수 있습니다.

일어나는 사고 전형 증상 주된 대책
데이터 층(문자 인코딩) 인코딩 오해석, 변환 손실 縺ッ 같은 문자 깨짐, ?로의 치환, U+FFFD(�) 변환 경로를 특정하고 고침
외관 층(글꼴) 글꼴별 글리프 차이, 글리프 누락 같은 데이터인데 모양이 다름, □(두부)가 됨 글꼴을 통일하거나 바꾸고 임베드

나눔의 단서로 「�」과 「□」의 차이를 기억하면 유용합니다. U+FFFD(REPLACEMENT CHARACTER)의 「�」은 데이터 층 변환 실패의 흔적이며, 원래 문자는 이미 잃었습니다. 반면 「□」는 많은 경우 데이터는 아직 있는데 글꼴에 글리프가 없는 것뿐이며, 글꼴을 바꾸면 표시될 수 있습니다.

�와 □로 증상을 나누기문자가 올바르게 표시되지 않을 때 �는 원래 문자가 이미 사라진 데이터 층 변환 실패의 흔적이고, □는 데이터는 아직 있는데 글꼴에 글리프가 없는 것뿐이며 글꼴을 바꾸면 표시될 수 있다�가 보임□가 보임문자가 올바르게 표시되지 않음무엇이 보이는가?데이터 층의 사고변환 실패의 흔적(원래 문자는 잃음)외관 층의 사고글꼴에 글리프가 없는 것뿐글꼴을 바꾸면 표시될 수 있음

그림 2: �는 데이터 층 사고의 징후이고 □는 외관 층 사고의 징후이며, 조사의 입구가 바뀐다.

인코딩 자체의 기본(CP932와 UTF-8, BOM, 개행 코드)은 「Windows의 문자 코드를 정리한다 - 왜 문자 깨짐이 일어나는가, 특히 Linux와 조합했을 때 무엇이 어긋나는가」와 「Windows의 문자 코드와 개행 코드를 정리한다 - Shift_JIS / UTF-8 / UTF-16, 문자 깨짐, CRLF / LF, 왜 혼란스러운가」에서 다룹니다. 여기서부터는 외관 층과, 그 경계에서 일어나는 문제입니다.

3. JIS90에서 JIS2004로 ── 코드는 그대로인데 글리프가 바뀌었다

서두의 「화면과 전표에서 葛가 달라 보인다」의 정체는, 많은 경우 여기입니다.

국어심의회의 2000년 보고 「표외한자자체표」를 따라, 2004년 개정 JIS X 0213:2004(통칭 JIS2004)는 168개 한자의 예시 글리프를 이른바 강희자전 형태에 가까운 인쇄 표준 형태로 개정했습니다. 葛, 辻, 飴, 芦, 溢, 餅 등이 대표 예입니다.1

Windows도 이에 맞춰 Windows Vista부터 MS Gothic / MS Mincho(그리고 새로 도입된 Meiryo)에서 JIS2004 글리프를 기본으로 삼았습니다. 현재 MS Gothic도 JIS2004 기반 기본 글리프를 가지며, JIS90 시대 글리프는 OpenType jp90 기능으로 접근하는 구조입니다.21

현재 MS Gothic의 글리프 구조Vista부터 MS Gothic은 JIS2004 글리프를 기본으로 하고, OpenType jp90 기능으로 JIS90 시대 글리프에 접근하는 구조이다MS Gothic(Vista 이후)기본 글리프: JIS2004 기반jp90 기능을 통해JIS90 시대 글리프

그림 3: 현재 MS Gothic은 JIS2004 글리프를 기본으로 하고, jp90 기능으로 JIS90 글리프로 전환할 수 있다.

여기서 중요한 것은 글꼴만 바뀌었고, 데이터는 전혀 바뀌지 않았다는 점입니다.

  • 葛의 코드 포인트는 XP와 Windows 11 모두 U+845B입니다
  • XP(JIS90 글리프)에서는 감싸는 부수의 안을 ヒ로 단순화한 형태로 표시되고, Vista 이후(JIS2004 글리프)에서는 안에 人도 쓰는 형태로 표시됩니다
  • 따라서 옛 시스템에서 인쇄한 전표의 스캔 이미지와 새 PC의 화면 표시는 문자의 모양이 어긋납니다. 데이터 비교는 완전히 일치합니다

辻의 신뇨 부수가 한 점인지 두 점인지, 飴의 「먹을 식」부수 형태 등도 같습니다. 이 역사를 모르면 조사는 「이전에서 데이터가 깨졌다」는 잘못된 방향으로 가기 쉽습니다. 이전 전후로 문자의 외관이 다르다는 말을 들으면, 먼저 코드 포인트를 비교하고, 일치하면 글꼴 글리프 차이를 의심하는 것이 올바른 순서입니다.

같은 코드 포인트, 글꼴에 따라 다른 글리프葛의 코드 포인트 U+845B는 XP와 Windows 11 모두에서 같고, 표시 모양만 JIS90 글리프 글꼴과 JIS2004 글리프 글꼴 사이에서 바뀌며, 데이터 비교는 완전히 일치한다코드 포인트 U+845B(葛)JIS90 글리프 글꼴(XP)JIS2004 글리프 글꼴(Vista 이후)안을 ヒ로 단순화한 형태안에 人을 쓰는 인쇄 표준 형태데이터 비교는 완전히 일치

그림 4: 글꼴만 바뀌었고, 코드 포인트 U+845B는 모든 환경에서 같다.

문자 자체는 바뀌지 않았으므로, 두 글리프 모두 「같은 문자」입니다. 다만 인명에서는 본인이나 관공서가 특정 형태를 고집하는 경우가 있고, 그 「데이터로서」의 구분 요구에 답하는 것이 다음 주제인 IVS입니다.

4. 이체자 선택자(IVS) ── 글리프를 데이터로 지정하기

IVS(Ideographic Variation Sequence)는 한자 바로 뒤에 「이체자 선택자」라는 보이지 않는 코드 포인트를 두어, 글리프 이체를 데이터로 지정하는 메커니즘입니다. 쓰는 선택자는 U+E0100–U+E01EF(VS17–VS256)입니다.3

어느 「기본 문자 + 선택자」열이 어느 글리프를 가리키는지는 Unicode Consortium이 관리하는 IVD(Ideographic Variation Database)라는 레지스트리가 정합니다. 주요 컬렉션은 다음과 같습니다.4

컬렉션 등록 기원과 용도
Adobe-Japan1 2007 Adobe의 일본어 문자 컬렉션. 상용 글꼴에서 이체 글리프를 전환하는 기반
Hanyo-Denshi 2010 범용전자정보교환환경정비프로그램. 호적·주민기본대장 문자 같은 정부 문자에 대응
Moji_Joho 2014 문자정보기반(MJ)에 대응. IPAmj 명조와 함께 씀. 2026년 8월에도 추가 등록

Microsoft 문서는 예를 들어 U+845B만(葛)이 니시카사이역 표기에 쓰이고, U+845B+U+E0100(VS17)이 나라현 가쓰라기시 표기에 쓰인다고 듭니다. 같은 葛이지만, 어느 글리프인지를 데이터로 구분할 수 있습니다.3

IVS로 같은 葛를 데이터로 구분하는 예U+845B만의 葛는 니시카사이역 표기에 쓰이고, U+845B 뒤에 VS17을 둔 열은 가쓰라기시 표기에 쓰이며, 어느 열이 어느 글리프를 가리키는지는 IVD 레지스트리가 정한다U+845B만니시카사이역 표기에 쓰인 글리프U+845B + VS17가쓰라기시 표기에 쓰인 글리프IVD(레지스트리)

그림 5: 같은 葛라도 선택자의 유무로 어느 글리프인지를 데이터로 구분할 수 있다.

4.1. 대응하지 않는 환경에서의 동작

글꼴 측에서 IVS와 글리프의 대응은 OpenType cmap 테이블(포맷 14)로 구현됩니다.5 대응 글꼴(IPAmj 명조 등)과 대응 앱이 둘 다 있으면 지정한 글리프가 나오고, 없으면 다음과 같이 됩니다.

  • 사양상의 올바른 동작: 선택자를 무시하고 기본 문자의 기본 글리프를 표시(선택자 자체는 보이지 않음)
  • 옛 앱과 일부 그리기 스택: 선택자를 독립된 알 수 없는 문자로 취급해, 여분의 □가 표시됨

즉 IVS는 「열화해도 기본 문자는 읽을 수 있게」설계되어 있지만, 「항상 지정한 글리프로 표시된다」는 보장은 받는 쪽 환경에 따릅니다. 정부 주민기록·호적 시스템은 문자정보기반 글꼴과 IVS의 조합을 쓰지만, 일반 업무 시스템이 함부로 받아들이면 표시, 인쇄, 하위 시스템 어딘가에서 글리프가 떨어집니다.

IVS를 포함한 데이터가 표시되는 방식대응 글꼴과 대응 앱이 둘 다 있으면 지정한 글리프로 표시되고, 없으면 선택자를 무시하고 기본 문자의 기본 글리프가 보이며, 옛 앱과 일부 그리기 스택에서는 선택자를 알 수 없는 문자로 취급해 여분의 □가 표시된다아니오무시옛 / 일부 스택기본 + IVS 선택자대응 글꼴 + 앱인가?지정한 글리프어떻게 그려지는가?기본 글리프여분의 □사양상의 올바름

그림 6: IVS는 열화해도 기본 문자로 읽을 수 있지만, 지정한 글리프가 나오는지는 받는 쪽 환경에 따른다.

4.2. 구현상의 주의 ── 「한 문자」가 최대 4코드 유닛이 될 수 있다

U+E0100 이후의 IVS 선택자는 보조 평면의 코드 포인트이므로, UTF-16에서는 항상 서로게이트 쌍(2코드 유닛)입니다. 기본 문자가 보조 평면 한자(예: JIS2004에서 추가된 𠮟(U+20B9F))이면 기본만으로 이미 2코드 유닛이며, 사용자가 「한 문자」로 인식하는 열은 UTF-16에서 최대 4코드 유닛, UTF-8에서 최대 8바이트입니다.

  • C#의 "葛󠄀"(葛+VS17)는 string.Length == 3입니다. Substring과 고정 길이 슬라이스는 기본 문자와 선택자를 쪼갤 위험이 있습니다
  • 문자 수 검증과 슬라이스는 코드 유닛이 아니라 그래핌 단위(StringInfo 같은 API)로 해야 합니다
  • DB 열 길이(SQL Server의 nvarchar(n)은 UTF-16 코드 유닛)에서 IVS를 받으면, 겉보기 문자 수의 2배에서 4배를 확보하십시오
  • 검색과 비교에서 선택자의 유무는 다른 문자열이 됩니다. 「葛」검색이 「葛+VS17」에 맞을지는 요구로 정하고 구현해야 합니다
IVS를 포함한 한 문자와 UTF-16 코드 유닛사용자가 한 문자로 인식하는 기본 문자와 이체자 선택자의 열은 선택자가 항상 서로게이트 쌍이고, 기본 문자가 보조 평면 한자면 추가로 2코드 유닛이 되어 UTF-16에서 최대 4코드 유닛이다보이는 한 문자기본 문자이체 선택자보조 평면이면 +2항상 2코드 유닛최대 4 UTF-16 유닛고정 슬라이스에서 쪼개짐

그림 7: IVS를 포함한 한 문자는 UTF-16에서 최대 4코드 유닛이 될 수 있으며, 코드 유닛으로 자르는 것은 위험하다.

5. 외자(EUDC) ── 그 PC에서만 표시되는 문자

외자는 사용자가 Unicode 사용자 정의 영역(PUA: U+E000–U+F8FF 등)의 코드 포인트에 자기 글리프를 할당하는 메커니즘입니다. 사용자 정의 영역 코드 포인트에는 전 세계적으로 합의된 의미가 없으며, 같은 U+E000이 PC마다, 조직마다 다른 문자에 할당될 수 있습니다.6

Windows에서는 사용자 정의 문자 편집기(eudcedit.exe)로 글리프를 만들고, eudc.tte라는 글꼴 파일에 저장됩니다. 이 파일은 숨은 글꼴로 설치되고 HKEY_CURRENT_USER\EUDC 레지스트리에서 각 글꼴과 연결됩니다.7 Shift_JIS(CP932) 시대의 외자 범위는 0xF040–0xF9FC였고, Unicode로 변환하면 사용자 정의 영역으로 매핑됩니다.

이 메커니즘의 결과는 분명합니다.

  • eudc.tte는 그 PC(그 사용자)의 것이며, 데이터와 함께 상대에게 가지 않습니다
  • 메일, PDF, 웹, 다른 시스템으로 넘기는 순간 □가 되거나 상대의 다른 외자처럼 보입니다
  • OS 이전이나 PC 교체에서 eudc.tte를 옮기는 것을 잊으면 「옛 PC에서 표시되던 문자가 표시되지 않는다」가 일어납니다

이것이 서두 두 번째 상담의 정체입니다.

외자가 그 PC에서만 표시되는 이유사용자 정의 문자 편집기에서 만든 글리프는 eudc.tte에 저장되고 그 PC의 레지스트리에서 글꼴과 연결되므로, 사용자 정의 영역 코드만 메일, PDF, 다른 시스템으로 넘기면 □가 되거나 다른 문자처럼 보인다PUA 글리프를 만듦eudc.tte에 저장사용자 정의 문자 편집기레지스트리 글꼴 매핑그 PC에서 표시eudc.tte는 뒤에 남음PUA 코드만 감메일 / PDF / 다른 시스템□ 또는 잘못된 문자

그림 8: 글리프는 eudc.tte에 살고, 데이터에는 사용자 정의 영역 번호만 남으므로, 외자는 PC를 떠나면 깨져 보인다.

5.1. 이미 외자를 받은 시스템을 위한 현실적인 답

문제는 레거시 시스템에서 이어받은 데이터에 이미 외자가 섞여 있을 때입니다. 이전 의뢰에서 권하는 절차는 다음과 같습니다.

  1. 조사: 데이터베이스와 파일을 사용자 정의 영역(U+E000–U+F8FF) 정규식으로 스캔하고, 쓰는 외자 코드와 건수를 목록화합니다. 각 거점 PC에서 eudc.tte를 모아 글리프를 확인합니다
  2. 특정: 외자마다 「정규 Unicode 문자로 표현할 수 있는가」, 「IVS로 표현할 수 있는가」, 「문자정보기반(MJ)에 대응 문자가 있는가」를 조사하고 대체 문자 대응표를 만듭니다. 실무에서는 대부분이 옛 형태를 JIS 외자로 만들어 둔 경우입니다
  3. 치환: 대응표에서 데이터를 치환합니다. 정말로 대응 문자가 없을 때만 이미지로 두거나 그 레코드에 주석을 붙입니다
  4. 차단: 새 시스템에서는 검증에서 사용자 정의 영역 입력을 거부하고, 새 외자를 만들지 않습니다
외자가 섞인 데이터를 이전하는 절차사용자 정의 영역을 스캔하고 eudc.tte를 모아 쓰는 외자를 목록화하고, 대체 문자 대응표를 만들어 치환하며, 새 시스템에서는 검증에서 사용자 정의 영역 입력을 거부하고 새 외자를 만들지 않는다조사: PUA를 스캔특정: 대체표표에서 치환차단: 새 외자 없음eudc.tte를 수집대응 없음: 이미지 또는 주석

그림 9: 외자는 조사, 특정, 치환, 차단의 네 단계로 이전하고, 새 외자를 만들지 않는다.

정부 측의 방향도 같습니다. 지자체가 독자로 만든 외자(전국 약 200만 자라 함)를 뒤에 나오는 행정사무표준문자에 대해 유일하게 식별하고 사용을 멈추는 방침이 밝혀져 있습니다.10 「외자를 늘리지 말고, 표준화된 문자 집합에 대해 식별한다」가 공공·민간 모두에서 자리 잡은 이전 패턴이 되고 있습니다.

6. 정부의 문자 기반 ── 호적통일문자에서 행정사무표준문자로

인명을 다루는 시스템의 설계에서는, 정부 측 문자 기반을 아는 것이 「어디까지 받아들일지」를 정하는 재료가 됩니다.

이름 주관 개요
호적통일문자 법무성 호적 전산화를 위해 정리한 약 56,000자. 법무성 사이트에서 검색 가능8
주민기본대장 네트워크 통일문자 J-LIS(지방공공단체정보시스템기구) 주민기본대장 네트워크에서 쓰는 약 21,000자
문자정보기반(MJ) 문자정보기술촉진협의회 행정 업무에서 쓰는 약 60,000자를 정리. MJ 문자·글리프 이름으로 관리하며 IPAmj 명조 글꼴과 MJ 문자정보 목록을 공개. IPA 프로젝트로 정리되어 지금은 협의회로 이관9
행정사무표준문자(MJ+) 디지털청 문자정보기반을 호적 문자 등 MJ로 식별할 수 없는 문자로 확장한 문자 집합. 표준에 맞는 시스템에서 인명 등은 이 문자 집합을 쓰며, 문자 인코딩은 JIS X 0221:202010

지자체 핵심 업무 시스템(표준에 맞는 시스템)에서는 인명 등의 정보 연동에는 행정사무표준문자를 쓰고, 통일된 연동 규칙이 없는 외부 시스템── 스마트폰 등──과는 JIS X 0213:2012 범위로 연동하는 2층 구조가 표준 사양에 있습니다.10 「안에서는 넓은 문자 집합을 들고, 밖과는 일반 환경이 표시할 수 있는 범위로 교환한다」는 구조 자체도 민간 시스템의 참고가 됩니다.

표준 적합 시스템의 2층 연동지자체 표준 적합 시스템은 인명 등의 정보 연동에 행정사무표준문자를 쓰고, 통일된 연동 규칙이 없는 스마트폰 같은 외부 시스템과는 JIS X 0213:2012 범위로 연동한다지자체 표준 시스템이름 연동외부 시스템행정 표준 문자인명 등JIS X 0213:2012 범위규칙 없음(스마트폰)안에는 넓은 집합을 보유

그림 10: 2층 구조. 정부 연동은 행정사무표준문자, 규칙 없는 외부 연동은 JIS X 0213:2012.

일반 업무 시스템의 실무 안내로는 다음을 권합니다.

  • 받아들이는 문자 집합을 정해 사양과 입력 검증 양쪽에 밝히십시오. 예를 들어 「JIS X 0213:2012 범위」, 「사용자 정의 영역과 결합 문자는 허용하지 않음」, 「IVS는 받지 않음(또는 받지만 표시 보장은 IPAmj 명조 환경만)」
  • 제한 없이 받아들이지 마십시오. 「Unicode이니 무엇이든」이라는 설계는 표시, 인쇄, 연동 어딘가에서 깨집니다
  • 범위 밖 문자의 운용을 미리 정하십시오. 대체 표기(신자체, 가타카나)로 치환하는 규칙과 당사자에게 설명하는 문구 자체가 시스템 사양입니다
  • 정부나 금융 같은 하위 시스템에 문자 집합 규칙이 있으면, 그것을 권위로 삼아 맞춥니다
받아들이는 문자 집합의 설계와 운용받아들이는 문자 집합을 정해 사양과 입력 검증 양쪽에 밝히고, 범위 안 문자는 받아들이며, 범위 밖 문자는 대체 표기로 치환하는 규칙과 당사자에게 설명하는 문구를 포함한 운용을 정한다아니오받아들이는 문자 집합을 정함사양에 밝힘입력 검증에 밝힘범위 안인가?받아들임대체 표기로 치환당사자에게 설명하는 문구도 사양

그림 11: 받아들이는 문자 집합을 사양과 입력 검증 양쪽에 밝히고, 범위 밖 운용도 정한다.

7. 글꼴 선택과 임베드 ── 화면과 전표를 맞추기

7.1. 흔한 글꼴의 성격

글꼴 커버리지 성격과 쓸 곳
MS Gothic / MS Mincho Windows 표준 저해상도 화면용으로 설계된 옛 손. 기본 글리프는 JIS2004 기반2. 레거시 전표와의 호환 유지에 아직 현역
Meiryo Vista 이후 ClearType을 가정한 현대 화면 서체. Vista 세대 JIS2004 이전과 동시에 등장1
Yu Gothic / Yu Mincho Windows 8.1 이후 Windows와 macOS 양쪽에 실려, 문서의 느낌을 맞추기 쉬운 패밀리
BIZ UD Gothic / BIZ UD Mincho Windows 10 1809 이후 모리사와 유니버설 디자인 서체. 전표와 화면 가독성을 중시하는 의뢰의 첫 후보14
Noto Sans JP 별도 설치 오픈 소스로 제공되며, 서버나 Linux 환경에 묶고 웹으로 전달하기 쉬움

선택에서 중요한 것은 서체 취향보다 그 글꼴이 표시, 인쇄, PDF 생성에 관여하는 모든 환경에 있는가입니다. Windows 10/11의 일본어 보충 글꼴(BIZ UD 등)은 구성에 따라 없을 수 있고, 서버 측에서 PDF를 만드는 구성에서는 서버의 글꼴 유무가 직접 영향을 줍니다.

글꼴을 고를 때 확인할 환경글꼴 선택에서 중요한 것은 서체 취향보다 그 글꼴이 표시, 인쇄, PDF 생성에 관여하는 모든 환경에 있는가이며, 보충 글꼴의 구성과 서버의 글꼴 유무가 직접 영향을 준다후보 글꼴모든 환경에 있는가?표시 환경인쇄 또는 PDF 서버인가?인쇄 환경PDF 생성 서버보충 글꼴인가?없을 수 있음서버의 글꼴이 중요

그림 12: 글꼴은 서체 취향보다 표시, 인쇄, PDF 생성의 모든 환경에 있는지로 고른다.

7.2. 전표 설계의 기본 ── 맞추고, 임베드한다

  • 화면과 전표에 같은 글꼴을 지정하십시오. 글꼴이 다르면 같은 데이터가 다른 글리프처럼 보이고, 서두의 항의가 납니다. 「화면은 Meiryo, 전표는 MS Mincho」같은 구성은 적어도 JIS2004 168자에서 글리프 차이가 있는지 확인해야 합니다
  • PDF에 글꼴을 임베드하십시오. 임베드하지 않으면 보는 쪽이 손에 있는 글꼴로 대체 그려, 글리프뿐 아니라 레이아웃도 바뀔 수 있습니다
  • 임베드가 허용되는지는 라이선스가 정합니다. OpenType 글꼴은 fsType 필드에 임베드 권한(Installable / Restricted / Preview & Print / Editable, 서브셋 금지 등)을 선언하며, 임베드가 허가되지 않은 글꼴을 임베드해서는 안 됩니다.11 상용 글꼴은 계약 확인이 필요합니다
  • 서브셋 임베드를 기준으로 하십시오. 사용한 문자의 글리프만 넣으면, 일본어 글꼴 전체(수 MB에서 수십 MB)를 떠안지 않아도 됩니다
  • 장기 보존 요구가 있으면 PDF/A. PDF/A(ISO 19005)는 표시에 필요한 자원을 파일 안에 완결시키는 표준이며, 글꼴 임베드가 요구됩니다.12 「10년 뒤 열었더니 글리프가 바뀌어 있었다」를 막는 가장 확실한 방법이기도 합니다
글꼴 임베드의 판단 흐름PDF에 글꼴을 임베드하기 전에 fsType 임베드 라이선스를 확인하고, 허가되어 있으면 서브셋 임베드를 기준으로 하며, 장기 보존 요구가 있으면 임베드를 요구하는 PDF/A를 검토한다허가됨허가되지 않음장기 보존 요구PDF에 글꼴을 임베드fsType으로 임베드가 허가되는가?서브셋 임베드가 기준임베드해서는 안 됨사용한 문자의 글리프만PDF/A를 검토글꼴 임베드가 요구됨

그림 13: 임베드는 fsType 라이선스 확인을 전제로 하며, 서브셋 임베드와 PDF/A가 기준이다.

인쇄와 PDF 출력의 구현 수단을 고르는 법은 「Windows 업무 앱의 인쇄와 PDF 출력」에서 깊게 다룹니다.

8. 글꼴 링킹과 폴백 ── 「다른 글꼴이 섞인다」는 현상

지정한 글꼴에 글리프가 없는 문자는 아무것도 표시되지 않는 것이 아니라, 다른 글꼴로 대체 그리는 것이 현대 그리기 스택의 기본 동작입니다. GDI에서는 레지스트리(FontLink\SystemLink)에 정의된 「글꼴 링킹」이 하고, DirectWrite, WPF, 브라우저에서는 「글꼴 폴백」이 합니다.15

글꼴 링킹과 폴백의 흐름지정한 글꼴에 글리프가 있으면 그대로 표시되고, 없으면 글꼴 링크 또는 폴백 글꼴로 대체 그려지며, 어디에도 글리프가 없으면 □가 되지만 데이터는 아직 살아있는 경우가 많다아니오아니오문자를 표시지정한 글꼴에 글리프가 있는가?지정한 글꼴로 표시링크 또는 폴백 대상에 있는가?다른 글꼴로 대체 그림서체가 섞인 느낌의 원인□(두부)가 표시됨데이터는 아직 살아있는 경우가 많음

그림 14: □는 폴백 실패의 흔적이며, 대체 그리기가 성공하는지가 「섞임」과 「두부」의 갈림이다.

이 메커니즘을 알면 다음 흔한 경우를 설명할 수 있습니다.

  • 라틴과 일본어의 서체 느낌이 다르다: 라틴 글꼴을 먼저 지정했기 때문에, 일본어 부분만 링크 또는 폴백 일본어 글꼴로 그려지고 있다
  • 일본어 문장의 한자만 중국풍 글리프가 된다: 폴백 대상이 중국어 글꼴로 해석되었다. 언어 정보(lang 특성이나 로케일)를 올바르게 넘기지 않는 웹 페이지나 앱에서 일어나기 쉽다
  • 두부(□)가 나타난다: 지정한 글꼴에도 폴백 대상에도 글리프가 없다. 즉 □는 「폴백 실패의 흔적」이며, 데이터는 아직 살아있는 경우가 많다

폴백은 구제 메커니즘이며, 처음부터 올바른 글꼴을 고르는 것을 대신하지 않습니다.15 업무 앱에서 건강한 위치는 「주된 표시·인쇄 경로는 설계한 글꼴만으로 완결하고, 폴백은 예상 밖 문자의 보험」입니다. 다국어 UI에서 글꼴을 고르는 생각은 「WinForms/WPF 앱 다국어화」도 보십시오.

9. 업무 앱의 구현 체크리스트

마지막으로, 입력부터 연동까지 각 층에서 확인할 점을 표로 정리합니다.

전형 사고 설계·구현 포인트
입력 IME에서 환경 의존 문자, IVS를 포함한 문자, 사용자 정의 영역 문자가 들어옴 받아들이는 문자 집합을 정하고 검증. 범위 밖은 오류보다 안내(대체 표기 제안)가 창구 업무를 멈추지 않게 함
정규화 NFKC가 ㈱를 (株)로 바꾸고, 전각·반각을 통일하고, ①을 1로 바꾸는 의도하지 않은 변환. NFC조차 CJK 호환 한자(예: U+FA19 神)를 통합 한자 U+795E로 바꿈 인명과 주소에 NFKC를 적용하지 말 것. 정규화는 용도(검색 키 생성 등)로 한정하고, 입력된 원본을 저장13
저장 서로게이트 쌍과 IVS로 인한 열 길이 부족, 코드 유닛으로의 절단 UTF-8/UTF-16으로 저장하고 열 길이에 코드 유닛 여유를 둠. 그래핌 단위로 자름
표시 글꼴에 글리프가 없어 □, 폴백으로 글리프가 바뀜 대상 문자 집합을 표시할 수 있는 글꼴을 명시하고, 대상 OS의 표준 커버리지를 확인
인쇄와 PDF 화면과 전표의 글리프 차이, 보는 쪽의 대체 그리기 화면과 전표의 글꼴을 맞추고, 라이선스 확인 뒤 PDF에 서브셋 임베드11
다른 시스템과의 연동 JIS X 0213의 추가 한자, IVS, 외자가 Shift_JIS(CP932) 변환에서 ?가 됨 연동 사양에 문자 인코딩과 문자 집합을 밝힘. CP932 연동이 남으면 변환 불가 문자 검출과 치환 규칙을 구현

정규화는 특히 이 글의 주제 그 자체인 함정입니다. 「좋은 의도」로 적용한 처리가 이체자와 전각·반각의 구분을 짓밟습니다. 원본은 그대로, 처리는 복사본에서가 원칙입니다. CSV 연동의 문자 코드 사고는 「CSV는 “그냥 텍스트”가 아니다」에서 깊게 다룹니다.

원본은 그대로, 처리는 복사본에서입력된 문자열을 원본으로 그대로 저장하고, 정규화는 검색 키 생성 같은 용도로 한정해 복사본에 적용한다. 원본에 NFKC를 적용하면 이체자와 전각·반각의 구분을 잃는다입력된 문자열원본: 입력된 대로 저장복사본: 용도로 한정해 정규화검색 키 생성 등원본에 NFKC를 적용하면 구분이 짓밟힘

그림 15: 정규화는 용도로 한정해 복사본에 적용하고, 원본은 입력된 대로 저장한다.

10. 정리

  • 문자 문제는 먼저 「데이터 층(문자 인코딩)」과 「외관 층(글꼴)」로 나눕니다. �는 데이터 층 사고의 징후이고, □는 외관 층 사고의 징후입니다.
  • JIS X 0213:2004는 168자의 예시 글리프를 바꿨고, Windows는 Vista부터 JIS2004 글리프를 기본으로 합니다. 葛, 辻, 飴가 환경에 따라 달라 보이는 것은 글꼴의 역사이지 데이터 손상이 아닙니다.
  • 글리프를 데이터로 고정하는 표준 수단은 IVS이지만, 대응 글꼴과 대응 앱이 없으면 기본 글리프로 떨어집니다. 한 문자가 최대 4 UTF-16 코드 유닛이 될 수 있다는 구현 영향을 잊지 마십시오.
  • 외자(EUDC)는 그 PC 고유의 자산이며 데이터와 함께 갈 수 없습니다. 현실적인 답은 이전 때 목록화하고, 정규 문자 또는 IVS로의 대응표에서 치환하며, 새로 만드는 것을 멈추는 것입니다.
  • 인명을 다루는 시스템은 받아들이는 문자 집합을 정해 밝힙니다. 정부는 호적통일문자와 문자정보기반을 바탕으로 행정사무표준문자로 표준화하고 있으며, 연동하는 시스템은 그 움직임을 따라야 합니다.
  • 전표와 PDF에서는 「글꼴을 화면과 맞추고, 라이선스를 확인하고, 임베드한다」가 기준입니다. 장기 보존에는 PDF/A를 검토합니다.
  • NFKC 정규화, 코드 유닛으로의 슬라이스, CP932 변환은 이체자와 외자를 조용히 깨는 세 지점입니다. 원본 저장과 그래핌 단위 처리를 원칙으로 하십시오.

다음에 「문자가 다르다」는 말을 들으면, 먼저 질문을 이렇게 다시 만드십시오. 코드 포인트가 같은가, 다른가? 같으면 글꼴 문제이고, 다르면 데이터 문제입니다. 그 한 수가 조사의 입구를 잘못 잡지 않게 합니다.

조사의 입구를 정하는 첫 질문문자가 다르다는 말을 들으면 먼저 코드 포인트가 같은지 다른지를 비교하고, 같으면 글꼴 문제로, 다르면 데이터 문제로 조사를 시작한다같음다름문자가 다르다는 말을 들음코드 포인트가 같은가?글꼴 문제데이터 문제

그림 16: 코드 포인트가 같으면 글꼴 문제로, 다르면 데이터 문제로 조사를 시작한다.

관련 기사

관련 상담 영역

합동회사 코무라소프트에서는 업무 시스템의 문자 주변 설계와 조사를 다룹니다. 「화면과 전표에서 문자가 다르다」, 「이전 뒤 인명이 □가 되었다」같은 증상의 원인 분리부터, 레거시 시스템 이전 때의 외자 목록화와 대체 문자표 작성, 인명을 다루는 시스템의 수용 문자 집합 설계, 전표와 PDF의 글꼴 임베드 구성 리뷰까지, 코드 층과 글꼴 층 양쪽을 다룹니다.

참고 링크

  1. Morisawa Inc., JIS X 0213:2004 (JIS2004) | Font glossary. 표외한자자체표를 따라 JIS X 0213:2004에서 168개 한자의 예시 글리프가 인쇄 표준 형태(이른바 강희자전 형태)로 개정되었다는 점, JIS2004 대응 글꼴이 Windows Vista에 표준 포함되었다는 점에 대해.  2 3 4

  2. Microsoft Learn, MS Gothic font family. MS Gothic 패밀리의 기본 글리프가 JIS2004 기반이라는 점, OpenType ‘jp90’ 기능으로 JIS90 레거시 글리프에 접근할 수 있다는 점에 대해.  2 3

  3. Microsoft Learn, The Unicode standard. 이체 시퀀스가 기본 문자와 이체자 선택자(VS1–VS256, U+FE00–U+FE0F 및 U+E0100–U+E01EF)로 구성된다는 점, U+845B 葛와 U+845B+U+E0100(VS17)을 구분하는 예(니시카사이역과 가쓰라기시), 표시에 대응 글꼴이 필요하다는 점에 대해.  2 3

  4. Unicode Consortium, Ideographic Variation Database. UTS #37 기반 IVS 레지스트리. Adobe-Japan1(2007), Hanyo-Denshi(2010), Moji_Joho(2014) 같은 컬렉션이 등록되어 있고, 2026년 8월 판에서도 Moji_Joho 컬렉션에 추가 등록이 이루어졌다는 점에 대해.  2

  5. Microsoft Learn, cmap — Character to Glyph Index Mapping Table (OpenType spec). OpenType 글꼴이 cmap 서브테이블 포맷 14에서 Unicode Variation Sequences를 구현한다는 점, 기본/비기본 UVS의 구분, JIS2004 대응 글꼴에서의 사용 예에 대해.  2

  6. Microsoft Learn, End-User-Defined and Private Use Area Characters. 외자(EUDC)와 사용자 정의 영역(PUA) 문자가 사용자나 조직이 독자로 정의한다는 점, 같은 코드 포인트가 컴퓨터에 따라 다른 할당을 가지고 충돌할 수 있다는 점에 대해.  2

  7. Microsoft Learn, Character Sets and Fonts. PUA(U+E000–U+F8FF 등)가 Unicode EUDC 용도로 쓰인다는 점, 사용자 정의 문자 편집기에서 글리프를 만든다는 점, EUDC 글꼴이 .tte 파일로 숨은 설치되고 HKEY_CURRENT_USER\EUDC 레지스트리에서 글꼴과 연결된다는 점에 대해.  2

  8. Ministry of Justice, Koseki Unified Character Information — search-condition input. 법무성이 제공하는 호적통일문자 공식 검색 사이트. 호적에서 쓰는 문자의 글리프, 읽기, 관련 정보를 검색할 수 있다는 점에 대해.  2

  9. Character Information Technology Promotion Council, Character Information Platform project. 경제산업성 등의 지원으로 IPA가 정리하고 행정 업무에서 쓰는 약 60,000 한자를 다루는 문자정보기반(MJ 문자 글리프, MJ 문자정보 목록, IPAmj 명조 글꼴)이 지금은 협의회로 이관되어 공개되고 있다는 점에 대해.  2

  10. Digital Agency, Report of the Study Group on the Operation of Character Requirements in Local-Government Information Systems (July 2024). 지자체에서 쓰는 외자가 약 200만 자라 한다는 점, 문자정보기반을 확장한 「행정사무표준문자」(통칭 MJ+)가 표준 적합 시스템에서 인명 등의 문자 집합이며 문자 인코딩이 JIS X 0221:2020이라는 점, 인명 등의 정보 연동에는 행정사무표준문자를, 스마트폰 등과의 연동에는 JIS X 0213:2012를 쓴다는 점, 종래 외자를 행정사무표준문자에 대해 유일하게 식별하고 쓰지 않는 방침에 대해.  2 3 4

  11. Microsoft Learn, OS/2 — OS/2 and Windows Metrics (OpenType spec). 글꼴의 fsType 필드가 임베드 라이선스(Installable / Restricted License / Preview & Print / Editable, 서브셋 금지 비트 등)를 정의한다는 점, 임베드가 허가되지 않은 글꼴을 애플리케이션이 임베드해서는 안 된다는 점에 대해.  2 3

  12. PDF Association, PDF/A Basics. 장기 보존 PDF/A(ISO 19005)가 문서를 표시하는 데 필요한 요소를 파일 안에 포함하도록 요구하며, 글꼴 임베드가 대표적인 필수 예라는 점에 대해.  2

  13. Microsoft Learn, Using Unicode Normalization to Represent Strings. Unicode 정규화 형식 NFC/NFD/NFKC/NFKD 네 가지, KC/KD 형식이 전각·반각 문자 같은 호환 문자를 통일해 정보를 잃으므로 문자열의 정규 저장 형식으로는 일반적으로 적합하지 않다는 점에 대해.  2

  14. Microsoft Learn, BIZ UDGothic font family. 모리사와 유니버설 디자인 서체 BIZ UD Gothic이 Windows 10 버전 1809부터 일본어 보충 글꼴로 포함된다는 점에 대해. 

같은 태그를 공유하는 최신 기사입니다. 더 가까운 주제로 지식을 넓힐 수 있습니다.

이 기사와 가까운 토픽 페이지입니다. 기사를 출발점 삼아 관련 서비스와 다른 기사로 이어집니다.

이 기사는 다음 서비스 페이지로 이어집니다. 가까운 입구부터 확인해 주세요.

자주 묻는 질문

이 기사 주제에 대해 상담 시 자주 나오는 질문을 모았습니다.

같은 葛 자가 PC나 인쇄 전표에 따라 달라 보이는 이유는 무엇인가요?
문자 깨짐보다 글꼴 글리프의 차이일 가능성이 큽니다. JIS X 0213:2004(JIS2004)는 168개 한자의 예시 글리프를 인쇄 표준 형태로 개정했고, Windows도 Vista부터 MS Gothic / MS Mincho 등에서 JIS2004 글리프를 기본으로 삼았습니다. 葛, 辻, 飴 등이 대표 예로, Unicode 코드 포인트(데이터)는 같고 글꼴이 가진 글리프(외관)만 바뀌었습니다. 데이터를 비교하면 일치하고, XP 시대 전표 이미지와 새 PC 화면의 모양 불일치는 사양상의 동작입니다. 글리프까지 맞추고 싶으면 화면과 전표에 같은 글꼴을 쓰거나, 이체자 선택자로 글리프를 지정합니다.
이체자 선택자(IVS)를 쓰면 모든 인명 글리프 문제가 해결되나요?
그렇지 않습니다. IVS는 기본 문자 바로 뒤에 U+E0100 이후의 선택자를 두어 글리프를 데이터로 지정하는 메커니즘이며, 지정한 글리프는 IPAmj 명조 같은 대응 글꼴과 대응 앱이 둘 다 있을 때만 표시됩니다. 비대응 환경의 사양상 동작은 선택자를 무시하고 기본 문자의 기본 글리프를 보이는 것이며, 일부 환경에서는 선택자가 □로 나타날 수도 있습니다. 또한 IVS를 포함한 한 문자는 UTF-16에서 최대 4코드 유닛이 되어, 문자 수, 슬라이스, DB 열 길이 설계에 영향을 줍니다. 도입한다면 표시, 인쇄, 하위 시스템을 통해 대응 범위를 확인한 뒤에 쓰십시오.
외자(EUDC)로 등록한 문자가 다른 PC나 PDF에서 표시되나요?
원칙적으로는 안 됩니다. 외자는 사용자가 그 PC의 eudc.tte 파일에 Unicode 사용자 정의 영역(U+E000 이후) 코드 포인트로 글리프를 등록하는 메커니즘이며, 같은 코드 포인트는 다른 PC에서는 미정의이거나 다른 글리프입니다. 따라서 메일, PDF, 다른 시스템으로 넘기면 □가 되거나 다른 문자처럼 보입니다. 이미 외자가 섞인 데이터를 이어받았다면, 이전 때의 현실적인 길은 사용자 정의 영역 사용을 목록화하고, 정규 Unicode 문자 또는 이체자 선택자와의 대응표를 만들어 치환하는 것입니다. 새 시스템에서 새 외자를 만드는 것은 피해야 합니다.
업무 시스템은 인명 문자를 어디까지 받아들여야 하나요?
먼저 「받아들이는 문자 집합을 정해 사양으로 밝히는 것」입니다. 호적에는 약 56,000자의 호적통일문자가 있고, 정부 표준에 맞는 시스템은 문자정보기반을 확장한 행정사무표준문자를 쓰는 쪽으로 움직이고 있습니다── 다만 일반 업무 시스템이 같은 수준을 제한 없이 받아들일 의무는 없습니다. 현실적인 설계는 「JIS X 0213 범위까지」또는 「이체자 선택자나 사용자 정의 영역은 받지 않는다」같은 범위를 정하고, 입력 때 검증하며, 범위 밖은 알림이나 대체 표기로 운용하는 것입니다. 정부 시스템이나 지자체와 연동하는 시스템만 행정사무표준문자와 JIS X 0221 기반 연동 요구의 움직임을 따라야 합니다.
전표나 PDF가 화면과 같은 문자를 보이게 하려면 어떻게 하나요?
기준은 화면과 전표에 같은 글꼴을 지정하고, PDF에 글꼴을 임베드하는 것입니다. 글꼴이 다르면 같은 데이터라도 글리프가 바뀔 수 있고, 보는 PC에 글꼴이 없으면 대체 글꼴로 그려져 외관이 깨집니다. 임베드가 허용되는지는 글꼴의 라이선스(OpenType fsType)가 정하므로, 보고서 라이브러리에 맡기지 말고 확인하십시오. 사용한 문자만 넣는 서브셋 임베드는 파일 크기도 줄입니다. 장기 보존이 요구이면 글꼴 임베드를 요구하는 PDF/A를 검토합니다.

저자 프로필

기사 저자의 프로필 페이지입니다.

Go Komura

합동회사 코무라소프트 대표

Windows 소프트웨어 개발, 기술 상담, 장애 조사를 중심으로 재현이 어려운 장애 조사와 기존 자산이 남아 있는 프로젝트에 강점이 있습니다.

블로그 목록으로 돌아가기