윈도우 명령 프롬프트 인코딩 옵션
CMD /U 에서는 파이프 또는 파일에 UTF16으로 전달 또는 저장되나, 파일내 멀티바이트 문자(한글)가 출력 안되며, codepage 1200/1201 지원 안함
※ 콘솔 화면 출력은 ANSI, Unicode 모드 및 코드페이지와 관계없이 ANSI 사용
코드페이지 65001 사용시 문제점
1. 콘솔 화면 출력은 코드페이지와 관계없이 ANSI 인코딩 사용- 파이프 및 파일 출력 인코딩(UTF8)과 콘솔 화면 출력 인코딩(ANSI)이 다름
2. 일부 콘솔 유틸(sort 등)의 UTF8 미지원(ANSI 전용)
3. 콘솔 파이프 출력 버그(첫 문자가 한글이면 인코딩 실패)
- "새 폴더" EC 83 88 20 ED 8F B4 EB 8D 94 = UTF8(한글 3바이트)
3F 88 20 ED 8F B4 EB 8D 94 = ANSI(한글 2바이트)로 1회 인코딩 실패 후 나머지 원본 출력
- 첫 문자에 공백/기호 추가, for문으로 변환, 파일 출력 사용 등으로 우회 가능
CmdSort 기능
1. 문자열 오름차순/내림차순 정렬2. 입력 인코딩 자동 인식 (예제 참고)
- 배치스크립트의 시작부분에서 사용하면 깨짐없는 한글 출력 가능(콘솔 코드페이지 자동 변경)
※ 배치스크립트의 1024바이트 이내에 멀티바이트 문자(한글)가 있어야 함
3. 멀티라인 echo (예제 참고)
- 이스케이프/HEX 문자 사용
- 파이프 입력과 조합시 삽입할 위치 지정 가능
4. 이스케이프/HEX 문자 생성
5. 파일 인코딩 변환 및 BOM 설정
6. 입/출력 HEX 보기 (정상 동작 확인용)
예제
코드페이지 65001 에서 실행하시기 바랍니다.Active code page: 65001 ▲ 정렬 ◁ 파이프 입력 [명령어] dir /a:d/b/n | myCmdSort [출력] New folder1 New folder2 새 폴더1 새 폴더2 ▲ 정렬 ◁ 파일 입력 + 인코딩 인식 [명령어] myCmdSort ansifile.txt [출력] New folder1 New folder2 새 폴더1 새 폴더2 ▲ 타이프 ◁ 파일 입력 + 인코딩 인식 + 정렬 안함 [명령어] myCmdSort ansifile.txt -n [출력] New folder1 새 폴더1 New folder2 새 폴더2 ▲ 내림차순 정렬 ◁ 파일 입력 + 인코딩 인식 [명령어] myCmdSort ansifile.txt -r [출력] 새 폴더2 새 폴더1 New folder2 New folder1 ▲ 파일 인코딩 변환 ◁ 파일 입력 + 인코딩 인식 + 정렬 안함 ▷ 파일 출력 [명령어] myCmdSort utf8file.txt -n -o:ansiencoding.txt [출력] ansiencoding.txt ▲ 파일 인코딩 변환 ◁ 파일 입력 + 인코딩 인식 + 정렬 안함 ▷ 파일 출력 + BOM 설정 [명령어] myCmdSort utf8file.txt -n -o:ansiencoding.txt -b [출력] ansiencoding.txt ▲ 에코 ◁ Copy 결과 입력 + 이스케이프 문자 입력(출력 위치 지정) [명령어] copy /Y /B echoformat.txt echoformatcopy.txt | myCmdSort -s:"Copy Result: " -m:pre [출력] Copy Result: 1 file(s) copied. ▲ 멀티라인 에코 ◁ 이스케이프 문자 입력 [명령어] myCmdSort -s:\n\t이름:\s새\s폴더\n\t위치:\sD:\cmd\n\n [명령어 - Double Quotation] myCmdSort -s:"\n\t이름: 새 폴더\n\t위치: D:\bcmd\n\n" [출력] 이름: 새 폴더 위치: D:\cmd ▲ 멀티라인 에코 ◁ HEX 문자 입력 [명령어] myCmdSort -x:0D0A09C0CCB8A73A20BBF520C6FAB4F50D0A09C0A7C4A13A20443A5C636D640D0A0D0A [출력] 이름: 새 폴더 위치: D:\cmd ▲ 이스케이프 문자 생성 ◁ 파일 입력+ 인코딩 인식 [명령어] myCmdSort echoformat.txt -u myCmdSort echoformat.txt -u:q [출력] \n\t이름:\s새\s폴더\n\t위치:\sD:\bcmd\n\n "\n 이름: 새 폴더\n 위치: D:\bcmd\n\n" ▲ HEX 문자 생성 ◁ 이스케이프 문자 입력 [명령어] myCmdSort -s:\n\t이름:\s새\s폴더\n\t위치:\sD:\cmd\n\n -p [출력] 0D0A09C0CCB8A73A20BBF520C6FAB4F50D0A09C0A7C4A13A20443A5C636D640D0A0D0A ▲ 입력 파일 인코딩을 인식하여 콘솔 코드페이지 변경 ◁ 파일 입력 [명령어] myCmdSort ansifile.txt -t [명령어 - 배치파일 내부에서 사용시] myCmdSort %0 -t [출력] Console codepage changed: 949 myCmdSort utf8file.txt -t Console codepage changed: 65001 ▲ 입력/출력 HEX 보기 ◁ 파일 입력 + 인코딩 인식 + 내림차순 정렬 [명령어] myCmdSort ansifile.txt -r -d [출력] Encoding Test: 65001 Encoding Error: 65001 Encoding Test: 949 <HEX of Input data> 4E 65 77 20 66 6F 6C 64 65 72 31 0D 0A BB F5 20 C6 FA B4 F5 31 0D 0A 4E 65 77 20 66 6F 6C 64 65 72 32 0D 0A BB F5 20 C6 FA B4 F5 32 0D 0A ------------------- <HEX of Output data> BB F5 20 C6 FA B4 F5 32 0D 0A BB F5 20 C6 FA B4 F5 31 0D 0A 4E 65 77 20 66 6F 6C 64 65 72 32 0D 0A 4E 65 77 20 66 6F 6C 64 65 72 31 0D 0A -------------------- 새 폴더2 새 폴더1 New folder2 New folder1
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.
댓글
댓글 쓰기