강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

조준수님의 프로필 이미지
조준수

작성한 질문수

홍정모의 따라하며 배우는 C언어

13.8 텍스트 파일을 바이너리 처럼 읽어보기

ANSI UTF-8 질문

작성

·

302

0

위의 예제에서 SetConsoleOutputCP(CP_UTF)

함수를 사용하여 UTF-8 모드로 출력하라고 설정했잖아요.

궁금한게, 읽을 텍스트 파일이 UTF-8 모드로 저장되어있다면

위 함수를 사용해주어야 한글이 안깨지고

텍스트 파일이 ANSI로 저장되어있었다면 위 함수를 사용하면

한글이 깨져서 나오고 사용하지 않으면 한글이 정상적으로

나오는데 왜 이런건지 이유를 알고싶습니다

콘솔의 기본출력모드가 ANSI로 되어있어서 그런건가요?

그리고 또 궁금한게 왜 ANSI 방식으로도 한글을 출력할수가

있는건가요?

퀴즈

45%나 틀려요. 한번 도전해보세요!

`fopen` 함수 사용 시, 파일 모드 "w"와 "a"의 가장 큰 차이점은 무엇일까요?

"w"는 파일을 읽기 전용으로 열고, "a"는 쓰기 전용으로 엽니다.

"w"는 파일이 없으면 오류를 반환하고, "a"는 파일을 새로 생성합니다.

"w"는 기존 내용을 지우고 쓰고, "a"는 기존 내용 뒤에 추가합니다.

"w"는 텍스트 모드이고, "a"는 바이너리 모드입니다.

답변 1

1

안녕하세요 

저도 잘 알지 못하는 부분이라 찾아봤는데요!

ANSI 는 아스키코드의 확장판이라고 보면 된다고 합니다. 아스키코드는  아시다시피 8bit로 문자를 표현할 수 잇죠. ANSI는 1bit는 다른 언어의 문자를 표현하는데에 쓰기 때문에 사실상 7bit 로 문자를 표현한다고 하네요. 이 128 개의 문자로 한글을 표현하기에는 무리가 있습니다. 애초에 아스키코드는 알파벳들을 포함하니 영어 사용엔 문제가 전혀 없지만요!  보통 한글이나 한자같은 문자들은 1byte(=8bit) 만 필요한 알파벳과 달리 2byte 정도가 필요하다고 알고 있습니다. 그래서 ANSI 로 인코딩하면 한글이 깨지는게 아닐까 싶네요. 

콘솔의 기본출력모드는 ANSI 인 것 같네요. 그렇지만 UTF-8 로 바꿀 수 있는 것 같습니다. https://docs.microsoft.com/ko-kr/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=msvc-160

조준수님의 프로필 이미지
조준수

작성한 질문수

질문하기