Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

(시리즈 글이 12개 있습니다.)
.NET Framework: 326. 유니코드와 한글 - 유니코드와 닷넷을 이용한 한글 처리
; https://www.sysnet.pe.kr/2/0/1294

.NET Framework: 411. 유니코드의 "compatibility character"가 뭘까요?
; https://www.sysnet.pe.kr/2/0/1607

.NET Framework: 429. C# - 유니코드 한글 문자열을 ks_c_5601-1987로 변환하는 방법
; https://www.sysnet.pe.kr/2/0/1657

개발 환경 구성: 230. 유니코드의 Surrogate Pair, Supplementary Characters가 뭘까요?
; https://www.sysnet.pe.kr/2/0/1710

.NET Framework: 450. 영문 윈도우에서 C# 콘솔 프로그램의 유니코드 출력 방법
; https://www.sysnet.pe.kr/2/0/1712

.NET Framework: 794. C# - 같은 모양, 다른 값의 한글 자음을 비교하는 호환 분해
; https://www.sysnet.pe.kr/2/0/11710

개발 환경 구성: 407. 유니코드와 한글 - "Hangul Compatibility Jamo"
; https://www.sysnet.pe.kr/2/0/11724

Windows: 176. Raymond Chen이 한글날에 밝히는 윈도우의 한글 자모 분리 현상
; https://www.sysnet.pe.kr/2/0/12369

닷넷: 2307. C# - 윈도우에서 한글(및 유니코드)을 포함한 콘솔 프로그램을 컴파일 및 실행하는 방법
; https://www.sysnet.pe.kr/2/0/13794

개발 환경 구성: 731. 유니코드 - 출력 예시 및 폰트 찾기
; https://www.sysnet.pe.kr/2/0/13798

개발 환경 구성: 732. 모바일 웹 브라우저에서 유니코드 문자가 표시되지 않는 경우
; https://www.sysnet.pe.kr/2/0/13799

닷넷: 2310. .NET의 Rune 타입과 emoji 표현
; https://www.sysnet.pe.kr/2/0/13813




모바일 웹 브라우저에서 유니코드 문자가 표시되지 않는 경우

얼마 전에 쓴 유니코드 관련 글을,

C++ - 문자열의 대소문자를 변환하는 transform + std::tolower/toupper 방식의 문제점
; https://www.sysnet.pe.kr/2/0/13797

우연히 모바일 웹 브라우저로 봤는데, Chrome이든 Edge든 유니코드 문자가 모두 깨져 나왔습니다. 예를 들어 아래의 문자는,

𐲀 (U+10C80 코드 - OLD HUNGARIAN CAPITAL LETTER)

PC용 웹 브라우저에서는 잘 보이지만, 모바일 브라우저에서는 이상한 글자로 보일 것입니다. (현재 이 게시물에서는 아래의 내용에 따라 잘 보이도록 조치를 취했습니다. ^^)

이걸 보이게 하려면, 일단 HTML 문서 자체는 UTF-8 인코딩을 따르고 있으니 그건 문제가 아니고, 바로 폰트가 있어야 합니다. ^^

자, 그럼 위의 문서라면 "OLD HUNGARIAN" 문자를 보여줄 수 있는 폰트를 구해야 하고, 그 방법은 이전에 설명한 방법을 따르면 됩니다.

사실 여기에는 2가지 방법이 있는데요, 클라이언트가 폰트를 설치하든지, 서버 측에서 그 폰트를 구할 경로를 알려주는 것입니다. 다행히 "OLD HUNGARIAN" 문자를 보여줄 수 있는 폰트는 공개 폰트 라이선스(SIL OPEN FONT LICENSE)로 제공하고 있으므로,

Noto Sans Old Hungarian
; https://fonts.google.com/noto/specimen/Noto+Sans+Old+Hungarian

위의 문서에 나온 방법에 따라 HTML 페이지에 다음과 같이 폰트 파일을 구할 경로를 첨부할 수 있고,

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+Old+Hungarian&display=swap" rel="stylesheet">

저 웹 페이지를 방문한 클라이언트 측 웹 브라우저는 (시스템에 해당 폰트가 설치돼 있지 않다면) 런타임에 폰트를 다운로드해 사용할 수 있습니다.

일단, 이렇게 폰트가 마련됐으면 이후에는 웹 문서에 해당 폰트를 사용하도록 font-family 속성을 지정하면 됩니다.

<style>
    body {
        font-family: "Noto Sans Old Hungarian", sans-serif;
    }
</style>

그럼, 문서에 포함된 OLD HUNGARIAN 문자를,

<body>
    '𐲀' 문자
    𐲀
</body>

모바일 환경에서도 정상적으로 볼 수 있게 됩니다.




방법은 알았지만, 사실 이게 현실적으로 지원이 쉽지 않습니다. 정적 HTML 페이지인 경우라면 유니코드가 사용된 유형에 따라 필요한 폰트를 <link />로 직접 기입하면 그만인데요, 동적 페이지라면 살짝 상황이 달라집니다.

가령, 게시판에 올라오는 글 중에는 특정 폰트가 설치되었을 때만 보이는 유니코드 텍스트를 가지는 경우일 텐데요, 해당 게시물을 분석해 그에 맞는 폰트를 추가하도록 <link /> 태그를 추가하는 것이 녹록치 않습니다. 그렇다고, 대부분의 게시물에서 쓰지도 않을 유니코드 글자들을 위해 모든 폰트를 미리 <link />로 추가해 두는 것도 바람직하지 않습니다.

어쨌든, 제 경우에는 어차피 개인적으로 만든 블로그 게시판이어서 임의로 맞춰주었는데요, 그래서 아래의 게시물이 이제는 모바일 브라우저에서도 𐲀 글자가 깨지지 않고 잘 보이게 만들었습니다. ^^
C++ - 문자열의 대소문자를 변환하는 transform + std::tolower/toupper 방식의 문제점
; https://www.sysnet.pe.kr/2/0/13797




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 11/2/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 46  47  48  49  50  51  52  53  54  55  56  [57]  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12510정성태1/27/202116968.NET Framework: 1020. .NET Core Kestrel 호스팅 - Razor 지원 추가 [1]파일 다운로드1
12509정성태1/27/202116874개발 환경 구성: 524. Jupyter Notebook에서 C#(F#, PowerShell) 언어 사용을 위한 환경 구성 [3]
12508정성태1/27/202116102개발 환경 구성: 523. Jupyter Notebook - Slide 플레이 버튼이 없는 경우
12507정성태1/26/202116643VS.NET IDE: 157. Visual Studio - Syntax Visualizer 메뉴가 없는 경우
12506정성태1/25/202119762.NET Framework: 1019. Microsoft.Tye 기본 사용법 소개 [1]
12505정성태1/23/202116491.NET Framework: 1018. .NET Core Kestrel 호스팅 - Web API 추가 [1]파일 다운로드1
12504정성태1/23/202118440.NET Framework: 1017. .NET 5에서의 네트워크 라이브러리 개선 (2) - HTTP/2, HTTP/3 관련 [1]
12503정성태1/21/202116846오류 유형: 696. C# - HttpClient: Requesting HTTP version 2.0 with version policy RequestVersionExact while HTTP/2 is not enabled.
12502정성태1/21/202117451.NET Framework: 1016. .NET Core HttpClient의 HTTP/2 지원파일 다운로드1
12501정성태1/21/202116392.NET Framework: 1015. .NET 5부터 HTTP/1.1, 2.0 선택을 위한 HttpVersionPolicy 동작 방식파일 다운로드1
12500정성태1/21/202117215.NET Framework: 1014. ASP.NET Core(Kestrel)의 HTTP/2 지원 여부파일 다운로드1
12499정성태1/20/202118537.NET Framework: 1013. .NET Core Kestrel 호스팅 - 포트 변경, non-localhost 접속 지원 및 https 등의 설정 변경 [1]파일 다운로드1
12498정성태1/20/202116964.NET Framework: 1012. .NET Core Kestrel 호스팅 - 비주얼 스튜디오의 Kestrel/IIS Express 프로파일 설정
12497정성태1/20/202119528.NET Framework: 1011. C# - OWIN Web API 예제 프로젝트 [1]파일 다운로드2
12496정성태1/19/202116896.NET Framework: 1010. .NET Core 콘솔 프로젝트에서 Kestrel 호스팅 방법 [1]
12495정성태1/19/202119246웹: 40. IIS의 HTTP/2 지원 여부 - h2, h2c [1]
12494정성태1/19/202118506개발 환경 구성: 522. WSL 2 인스턴스와 호스트 측의 Hyper-V에 운영 중인 VM과 네트워크 연결을 하는 방법 [2]
12493정성태1/18/202116564.NET Framework: 1009. .NET 5에서의 네트워크 라이브러리 개선 (1) - HTTP 관련 [1]파일 다운로드1
12492정성태1/17/202115559오류 유형: 695. ASP.NET 0x80131620 Failed to bind to address
12491정성태1/16/202117588.NET Framework: 1008. 배열을 반환하는 C# COM 개체의 메서드를 C++에서 사용 시 메모리 누수 현상 [1]파일 다운로드1
12490정성태1/15/202116720.NET Framework: 1007. C# - foreach에서 열거 변수의 타입을 var로 쓰면 object로 추론하는 문제 [1]파일 다운로드1
12489정성태1/13/202118785.NET Framework: 1006. C# - DB에 저장한 텍스트의 (이모티콘을 비롯해) 유니코드 문자가 '?'로 보인다면? [1]
12488정성태1/13/202118053.NET Framework: 1005. C# - string 타입은 shallow copy일까요? deep copy일까요? [2]파일 다운로드1
12487정성태1/13/202116492.NET Framework: 1004. C# - GC Heap에 위치한 참조 개체의 주소를 알아내는 방법파일 다운로드1
12486정성태1/12/202118204.NET Framework: 1003. x64 환경에서 참조형의 기본 메모리 소비는 얼마나 될까요? [1]
12485정성태1/11/202118415Graphics: 38. C# - OpenCvSharp.VideoWriter에 BMP 파일을 1초씩 출력하는 예제 [2]파일 다운로드1
... 46  47  48  49  50  51  52  53  54  55  56  [57]  58  59  60  ...