질문)
메모장에서 작성되어진 한글문서를 저장하는 방법은 여러가지입니다. utf8, euc-kr 등등, 해당파일을 다양하게 저장해서 a1.txt, a2.txt, a3.txt 등등으로 만들어서 c언어를 통해서 파일을 읽어서 출력하려고 한다면, printf("%s")문으로 출력이 가능한가요?

답변)

한글 문서를 다양한 인코딩(e.g., UTF-8, EUC-KR 등)으로 저장한 텍스트 파일을 C언어에서 읽고 printf("%s")로 출력하는 경우, 단순히 파일을 읽어서 문자열로 출력하는 것은 가능하지만, 제대로 된 한글이 나오려면 몇 가지 조건이 충족되어야 합니다.


1. C에서 파일 읽고 printf("%s") 출력 가능 여부

  • 파일 내용을 바이트 단위로 읽어와서, 문자열 끝에 '\0'만 넣으면 printf("%s")로 출력 가능
  • 하지만 출력되는 문자열이 제대로 보이려면, 콘솔(터미널)의 문자 인코딩과 파일 인코딩이 일치해야 합니다.

2. 인코딩별 상황

인코딩파일 내부콘솔 출력printf("%s") 동작
UTF-8 3바이트 이상 다국어 인코딩 윈도우 콘솔은 기본적으로 CP949(=EUC-KR)이라, UTF-8 깨짐 가능성 높음 깨진 문자 출력 가능성 있음 → 콘솔 UTF-8 설정 필요
EUC-KR(ANSI CP949) 한글 2바이트 인코딩 윈도우 기본 콘솔 코드 페이지와 일치(대부분 CP949) 제대로 출력됨 (단, 콘솔 코드 페이지가 CP949일 경우)
UTF-16 (Unicode) 2바이트 유니코드 (보통 BOM 포함) 콘솔에서 바로 출력 불가, 별도 변환 필요 printf로 출력 불가, wchar_t 기반 함수 필요
 

3. 윈도우 콘솔과 인코딩 문제

  • 윈도우 기본 콘솔은 CP949(EUC-KR) 코드 페이지를 기본으로 사용
  • UTF-8 파일을 printf("%s")로 출력하면 한글 깨짐 발생
  • UTF-8로 출력하려면 콘솔 코드 페이지를 chcp 65001로 변경하거나, Windows 10 이후 콘솔에서 UTF-8 지원을 활성화해야 함
  • 또는 출력 전에 인코딩 변환(UTF-8 → CP949) 필요

4. C 코드에서 권장하는 방법

  • ANSI 인코딩(EUC-KR) 파일 → fread로 읽고 printf("%s") 출력 → 대부분 문제없음 (윈도우 기본 콘솔 기준)
  • UTF-8 파일 → 콘솔 코드 페이지 UTF-8 설정 필요하거나, 읽은 뒤 MultiByteToWideChar / WideCharToMultiByte API로 인코딩 변환
  • UTF-16 파일 → wchar_t 기반 함수(wprintf 등)와 UTF-16 입출력 함수 사용 필요

5. 요약

상황printf("%s") 출력 가능 여부주의 사항
EUC-KR 저장 파일 가능 콘솔 기본 CP949일 때 정상 출력
UTF-8 저장 파일 가능하지만 깨질 수 있음 콘솔 코드 페이지를 UTF-8(65001)로 변경해야 함
UTF-16 저장 파일 불가 wprintf 등 별도 처리 필요

 

+ Recent posts