성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Creating Docker multi-arch images f...
[정성태] BinaryFormatter removed from .NET 9...
[정성태] Extending the Windows Shell Progres...
[우광현] 와..... 범위를 잡았으니 클라이언트가 해당 범위를 확인해본다...
[정성태] 딱히, 그것 이상으로 더 설명할 내용이 없습니다. 동적 포...
[정성태] If Windows 3.11 required a 32-bit p...
[정성태] What is a hard error, and what make...
[괴물신인] 질문작성자인데 이 글을 이제봤네요 ㄷㄷ 이 글처럼 타입별로 인...
[정성태] 호오 기대되네요. ^^
[JunSeo 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>
첨부파일
스팸 방지용 인증 번호
1553
(왼쪽의 숫자를 입력해야 합니다.)