윈도우 콘솔 - 입력 인코딩 인식, 멀티라인 에코 / Windows Console - input encoding recognition, multiline echo

윈도우 콘솔 입력 인코딩 인식, 멀티라인 에코


윈도우 명령 프롬프트 인코딩 옵션

윈도우 콘솔 입력 인코딩 인식, 멀티라인 에코
CMD /A 에서는 파이프 또는 파일에 ANSI/UTF8 로 전달 또는 저장됨
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



Creative Commons Licenses
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글