성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] 정적 분석과 함께, 이제는 실행 시 성능 분석까지 (비록 Azu...
[정성태] .NET Source Browser를 이용해 Roslyn 소스 ...
[정성태] Experimental C# Interceptors: AOT &...
[정성태] .NET Conf 2023 (Day 2) - Tiny, fast...
[정성태] The end of the Tye Experiment #1622...
[정성태] This is a simple app that converts ...
[정성태] Wrathmark: An Interesting Compute W...
[정성태] FFmpeg Filters Every Youtuber Needs...
[정성태] 일단, PInvokeStackImbalance 오류가 발생했다는...
[Heegyoo Lee] 코드 자체는 동작하는 것처럼 보이는데요. (어떤 때는 시그니쳐가...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>C# - "Use Unicode UTF-8 for worldwide language support" 설정을 한 경우, 한글 입력이 '\0' 문자로 처리</h1> <p> 다음과 같이 간단하게 코딩한 후,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Console.Write("입력: "); string txt = Console.ReadLine(); Console.WriteLine(txt); </pre> <br /> 입력을 한글로 주면 txt에는 한글 문자만큼의 '\0' 문자가 반환됩니다.<br /> <br /> <img alt='net_kor_support_1.png' src='/SysWebRes/bbs/net_kor_support_1.png' /><br /> <br /> <hr style='width: 50%' /><br /> <br /> 이것은 환경의 문제입니다. 제어판의 Region 창에서 다음과 같이 "<a target='tab' href='https://www.sysnet.pe.kr/2/0/762'>Beta: Use Unicode UTF-8 for worldwide language support</a>" 옵션을 적용한 환경의 경우,<br /> <br /> <img alt='cmd_support_han_4.png' src='/SysWebRes/bbs/cmd_support_han_4.png' /><br /> <br /> 저렇게 .NET 환경의 Console.ReadLine()으로 한글을 읽는 경우 '\0' 문자로 반환됩니다. 실제로, 저 옵션을 설정하지 않은 영문/한글 윈도우의 경우에는 한글 입력이 잘됩니다.<br /> <br /> 이런 문제를 해결하려면 Console.InputEncoding을 다음과 같이 바꿔줘야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <span style='color: blue; font-weight: bold'>Console.InputEncoding = System.Text.Encoding.Unicode;</span> <a target='tab' href='https://www.sysnet.pe.kr/2/0/11559'>Console.OutputEncoding</a> = System.Text.Encoding.UTF8; Console.Write("입력: "); string txt = Console.ReadLine(); Console.WriteLine(txt); </pre> <br /> 이후에는 정상적으로 입력한 한글이 txt 변수에 보관되는 것을 확인할 수 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, "Beta: Use Unicode UTF-8 for worldwide language support</a>" 옵션 설정이 된 환경에서는 Console.InputEncoding의 기본값이 (<a target='tab' href='https://www.sysnet.pe.kr/2/0/12468#65001'>CodePage가 65001</a>에 해당하는) "System.Text.UTF8Encoding+UTF8EncodingSealed"입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // Windows 11 + Beta: Use Unicode UTF-8 for worldwide language support Console.WriteLine(Console.InputEncoding); // System.Text.UTF8Encoding+UTF8EncodingSealed // Console.InputEncoding.EncodingName == Unicode (UTF-8) // Console.InputEncoding.CodePage == 65001 // Console.InputEncoding.HeaderName == utf-8 // Console.InputEncoding.WindowsCodePage == 1200 Console.WriteLine(System.Text.Encoding.Default); // System.Text.UTF8Encoding+UTF8EncodingSealed </pre> <br /> 반면 일반적인 한글/영문 윈도우에서는 이렇게 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // 한글 Windows 11 Console.WriteLine(Console.InputEncoding); // System.Text.OSEncoding // Console.InputEncoding.EncodingName == (Code Page - 949) // Console.InputEncoding.CodePage == 949 Console.WriteLine(System.Text.Encoding.Default); // System.Text.UTF8Encoding+UTF8EncodingSealed </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // 영문 Windows 11 Console.WriteLine(Console.InputEncoding); // System.Text.OSEncoding // Console.InputEncoding.EncodingName == (Code Page - 437) // Console.InputEncoding.CodePage == 437 Console.WriteLine(System.Text.Encoding.Default); // System.Text.UTF8Encoding+UTF8EncodingSealed </pre> <br /> 따라서, "Beta: Use Unicode UTF-8 for worldwide language support</a>" 옵션이 설정된 환경을 고려한다면 다음과 같은 처리를 하는 것도 좋을 듯합니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > if (Console.InputEncoding.CodePage == 65001) { Console.InputEncoding = System.Text.Encoding.Unicode; } Console.Write("입력: "); string txt = Console.ReadLine(); Console.WriteLine(txt); </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
7835
(왼쪽의 숫자를 입력해야 합니다.)