영문 설정의 Windows 10 명령행 창(cmd.exe)의 한글 지원
예전에 이와 관련해서 글을 쓴 적이 있는데요.
영문 윈도우에서 C# 콘솔 프로그램의 유니코드 출력 방법
; https://www.sysnet.pe.kr/2/0/1712
cmd.exe 창에서 사용할 폰트를 추가하는 방법
; https://www.sysnet.pe.kr/2/0/1711
개발자 PC 환경 - 유니코드(Unicode)를 위한 설정
; https://www.sysnet.pe.kr/2/0/762
저 때까지만 해도 cmd.exe 창의 폰트 목록이 굉장히 부실했습니다.
시스템 로케일이 영문인 경우:
- Lucida Console
- Consolas
- Raster Fonts
시스템 로케일이 한글인 경우:
- Raster Fonts
- 굴림체
그래서 영문 윈도우 상에서 한글 출력을 콘솔 프로그램에서 할 수 없었습니다. 그런데, (정확한 버전을 모르겠습니다.) 어느 순간부터 Windows 10의 경우 명령행 창에 "시스템 로케일이 영문"인 경우에도 다음과 같이 풍부한 폰트 목록이 나타났습니다.
[그림 1: 한글 및 다양한 TTF 폰트를 지원]
그래서, 영문 윈도우에서도 (아시아 폰트가 설치되어 있으면) 한글 출력이 얼마든지 가능하게 되었습니다. 실제로 테스트를 해볼까요? ^^
다음과 같이 콘솔 프로그램을 만들고,
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
System.Text.Encoding oldEncoding = Console.OutputEncoding;
try
{
if (args.Length == 1 && args[0] == "utf8")
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
}
Console.WriteLine("한글");
}
finally
{
Console.OutputEncoding = oldEncoding;
}
}
}
}
"
개발자 PC 환경 - 유니코드(Unicode)를 위한 설정" 글에 쓴 대로 "Region and Language" 설정의 비-유니코드 문자열들에 대한 언어설정을 "영어"로 맞춘 윈도우 10에서 실행하면 다음과 같이 나옵니다.
위의 경우는, cmd 창에 한글 폰트를 설정하지 않았기 때문입니다. 따라서 cmd 속성 창에서 "[그림 1: 한글 및 다양한 TTF 폰트를 지원]"과 같이 한글 폰트를 하나 선택하면 다음과 같이 콘솔 화면이 곧바로 한글 출력으로 바뀝니다.
와~~~ 이제야 윈도우가 진정한 다국어를 지원하게 되었습니다. ^^
이와 함께 하나 더 이야기할 것이 있습니다. Windows 10 17134 빌드 버전부터 시스템의 기본 인코딩 설정을 UTF-8로 설정하는 기능이 생겼습니다.
Unicode in Microsoft Windows
; https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows
With insider build 17035 and the April 2018 update (nominal build 17134) for Windows 10, a "Beta: Use Unicode UTF-8 for worldwide language support" checkbox appeared for setting the locale code page to UTF-8.
제어판의 Region 창에서 다음과 같이 "Beta: Use Unicode UTF-8 for worldwide language support" 옵션을 체크해 적용할 수 있는데,
이렇게 설정이 되면 윈도우의 기본 코드 페이지가 65001이 됩니다. 따라서 위에서 제작한 콘솔 프로그램의 경우 굳이 코드 페이지를 바꿀 필요가 없이 다음과 같이 간단하게 작성할 수 있습니다.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("한글");
}
}
}
당연히 위의 프로그램을 실행해도 다음과 같이 정상적으로 한글 출력이 됩니다.
시간은 좀 걸리겠지만, 이제 (CP949로 대표되던 한글) 코드 페이지로 인한 윈도우 응용 프로그램의 호환 문제는 점차로 사라질 듯 싶군요. ^^
참고로, 일단 "Region and Language" 설정의 비-유니코드 문자열들에 대한 언어설정이 "영어"로 설정되면 ("Beta: Use Unicode UTF-8 for worldwide language support" 옵션의 설정과 상관없이) 이후로는 ksc_5601-1987로 저장되어 있던 모든 문서들은 화면에 글자가 깨져 나옵니다. 코드 페이지 값이 명백하게 달라졌으므로!
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]