질문)
메모장에서 작성되어진 한글문서를 저장하는 방법은 여러가지입니다. 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. 인코딩별 상황
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. 요약
EUC-KR 저장 파일 | 가능 | 콘솔 기본 CP949일 때 정상 출력 |
UTF-8 저장 파일 | 가능하지만 깨질 수 있음 | 콘솔 코드 페이지를 UTF-8(65001)로 변경해야 함 |
UTF-16 저장 파일 | 불가 | wprintf 등 별도 처리 필요 |
'c 언어 > CHAT.GPT' 카테고리의 다른 글
(CHAT.GPT)c언어로 c#의 List<string>에서 사용되는것과 같은 Add("apple") 메소드를 구현 (0) | 2025.06.24 |
---|