반응형
✅ ANSI란?
ANSI는 American National Standards Institute (미국 국가 표준 협회)의 약자로,
미국에서 산업, 기술, 정보통신 등의 표준을 정하는 민간 비영리 기관이다.
하지만 프로그래밍/터미널 문맥에서 "ANSI"라고 하면 보통은 ANSI Escape Code (또는 ANSI Escape Sequence)를 의미함.
✅ ANSI Escape Code란?
터미널(콘솔창)의 출력 형식을 제어하는 특수 문자 시퀀스야.
"\u001b[31mHello\u001b[0m"
빨간색으로 Hello를 출력하는 ANSI 코드
- \u001b는 ESC (Escape) 문자. \x1B 또는 \033 으로도 표현 가능.
- [31m은 전경색을 빨간색(Red)으로 바꾸는 명령.
- [0m은 스타일을 초기화(Reset)하는 명령.
✅ ANSI Escape Code로 할 수 있는 것들
- 텍스트 색상 변경
- 배경 색상 변경
- 굵게, 밑줄, 반전, 숨김 등 스타일
- 커서 이동, 화면 지우기, 라인 지우기, 커서 위치 저장/복원 등 터미널 제어
✅ 색상 종류
| 유형 | 코드 범위 | 설명 |
| 기본 8색 | 30-37 (전경색), 40-47 (배경색) | 빨강, 초록, 노랑 등 대표색 |
| 밝은색 (8색) | 90-97, 100-107 | 기본색보다 밝은 톤 |
| 256색 모드 | 0~255 | \x1b[38;5;{n}m / \x1b[48;5;{n}m |
| TrueColor (24bit) | R,G,B 직접 지정 | \x1b[38;2;R;G;Bm 형식 사용 |
대부분의 최신 터미널은 **256색 또는 TrueColor (16M 컬러)**를 지원하지만,
일부는 제한적인 색상만 지원함.
✅ ANSI와 관련된 다른 개념
- ASCII (American Standard Code for Information Interchange): 문자 인코딩 표준 (A=65, B=66 등)
- UTF-8/Unicode: 확장된 문자 인코딩, 전세계 문자 표현 가능
ANSI는 ASCII랑 이름만 비슷할 뿐, 터미널 제어 코드와 관련돼 있다는 점에서 다름.
ANSI, ASCII, UTF-8/Unicode의 차이점은 뭐야?
✅ 개요 비교
| 항목 | ANSI | ASCII | UTF-8 / Unicode |
| 의미 | American National Standards Institute | American Standard Code for Information Interchange | Unicode Transformation Format (8-bit) |
| 역할 | 표준 제정기관, 또는 터미널 제어 시퀀스 | 문자 인코딩 표준 (영문 중심) | 글로벌 문자 인코딩 (모든 언어) |
| 주로 쓰이는 곳 | 터미널 제어, ANSI Escape Code 등 | 초기 텍스트 인코딩 (7비트) | 현대 대부분의 시스템 (웹, 파일 등) |
| 표현 가능 문자 | 텍스트 색상, 커서 등 제어 기능 | 128개 문자 (기호, 숫자, 영어 등) | 전세계 모든 문자 (한글, 이모지 포함) |
| 문자수 | 제어 코드 중심 (문자 자체 아님) | 128개 (7bit) | 143,000+ (최대 4바이트/1문자) |
✅ 각각 더 자세히 보기
1. 🔷 ASCII
- 1960년대에 만들어진 가장 기본적인 문자 인코딩
- 7비트: 총 128개 문자 (0~127)
- 영어 알파벳, 숫자, 기본 기호, 제어 문자 (줄바꿈 등) 포함
예시:
A = 65 a = 97 0 = 48 \n = 10 (줄바꿈)
2. 🔷 ANSI
- 원래는 미국 표준 기관 이름
- 하지만 윈도우 환경에서 "ANSI 인코딩"이라고 할 때는 보통 로컬 문자셋 기반의 8비트 인코딩을 의미함 (예: Windows-1252, EUC-KR 등)
- 터미널 제어 문맥에서는 ANSI Escape Code로도 쓰임
- 글자색 바꾸기, 커서 위치 이동, 출력 초기화 등
📝 예:
\x1b[31mHello\x1b[0m // 빨간색 텍스트
3. 🔷 UTF-8 / Unicode
- 모든 언어와 기호를 하나의 표준으로 표현하기 위해 나온 인코딩 방식
- UTF-8은 Unicode의 대표적인 인코딩 방식
- 가변 길이 (1~4바이트)
- 영어는 1바이트, 한글은 3바이트 등
예시:
A → 1바이트 가 → 3바이트 (EC, 9A, B0) 😁 → 4바이트
- 전 세계 웹사이트, 파일 저장, 네트워크 등에서 사실상 표준
✅ 결론 요약
| 구분 | 핵심 요약 |
| ASCII | 기본 영문 문자 인코딩 (7비트, 128문자) |
| ANSI | 윈도우 로컬 문자셋 or 터미널 제어용 시퀀스 |
| UTF-8 | 전 세계 문자를 표현 가능한 국제 표준 인코딩 |
결국 ANSI는 단순히 터미널에서의 문자 제어 방법이란거네?
✅ 정리하자면:
📌 ANSI는 "문자 인코딩"이 아니다.
보통 우리가 말하는 "ANSI"는 다음 두 가지 문맥에서 쓰임:
- ANSI 인코딩
- 윈도우 환경에서의 로컬 문자셋 기반 8비트 인코딩
- 예: EUC-KR, Windows-1252 등
- 하지만 현대 기준에선 애매하고 구식.
- UTF-8이 ANSI 인코딩을 거의 대체함.
- ANSI Escape Code
- 터미널 제어용 문자 시퀀스
- 색상 변경, 커서 이동, 화면 지우기 등 출력 스타일 제어
- 유닉스/리눅스 터미널, VS Code, PowerShell 등에서 사용됨
✅ 그러니까 요약하면:
| 구분 | 설명 |
| ANSI 인코딩 | 지역별 8비트 문자셋 (UTF-8 등장 전의 인코딩 방식) |
| ANSI Escape Code | 터미널에서 색상, 커서 이동 등을 제어하는 명령어 시퀀스 |
🔧 예시 (ANSI Escape Code):
Console.Write("\x1b[32mHello\x1b[0m"); // 초록색으로 출력
🚫 반면 UTF-8이나 ASCII는?
- 문자를 어떻게 "저장/인코딩"할 것인가에 대한 방식
- ANSI Escape Code는 문자를 해석해서 터미널 동작을 바꾸는 것이지,
문자의 내용을 저장하거나 인코딩하는 건 아님.
좋아 그럼 이제 ANSI 사용법을 정리해줘
✅ 1. 기본 구조
ANSI Escape Sequence는 보통 이렇게 생겼어:
\x1b[<코드1;코드2;...m
- \x1b 또는 \033 또는 ESC: 이스케이프 문자
- [ : CSI (Control Sequence Introducer)
- 코드들 : 세미콜론으로 구분된 여러 개의 숫자 코드
- m : 텍스트 스타일/색상 변경 명령
✅ 2. 텍스트 색상 설정
🔹 전경색(글자색)
| 색상 | 코드 |
| 검정 | 30 |
| 빨강 | 31 |
| 초록 | 32 |
| 노랑 | 33 |
| 파랑 | 34 |
| 마젠타 | 35 |
| 시안 | 36 |
| 흰색 | 37 |
🔹 배경색
| 색상 | 코드 |
| 검정 | 40 |
| 빨강 | 41 |
| 초록 | 42 |
| 노랑 | 43 |
| 파랑 | 44 |
| 마젠타 | 45 |
| 시안 | 46 |
| 흰색 | 47 |
예시:
echo -e "\033[31m빨간 글자\033[0m"
✅ 3. 텍스트 스타일
| 스타일 | 코드 |
| 리셋 (초기화) | 0 |
| 굵게 | 1 |
| 흐리게 | 2 |
| 밑줄 | 4 |
| 반전 (배경/전경 뒤바꿈) | 7 |
예시:
echo -e "\033[1;34m굵고 파란 글자\033[0m"
✅ 4. 256색 / 24비트 RGB 색상
🔹 256색
echo -e "\033[38;5;196m256색 빨강\033[0m"
- 38;5;<번호>: 전경색
- 48;5;<번호>: 배경색
(0~15: 표준색, 16~231: 색상 그라데이션, 232~255: 흑백 그라데이션)
🔹 RGB 색상 (24비트)
echo -e "\033[38;2;255;100;0m주황색 글자\033[0m"
- 38;2;R;G;B: 전경색
- 48;2;R;G;B: 배경색
✅ 5. 커서 제어
| 동작 | ANSI 코드 |
| 커서 위로 n칸 | \033[<n>A |
| 커서 아래로 n칸 | \033[<n>B |
| 커서 오른쪽으로 n칸 | \033[<n>C |
| 커서 왼쪽으로 n칸 | \033[<n>D |
| 커서 위치 지정 | \033[<row>;<col>H 또는 f |
| 화면 지우기 | \033[2J |
| 라인 지우기 | \033[2K |
✅ 6. 사용 예 (C#)
Console.Write("\u001b[1;31m굵은 빨간 글자\u001b[0m\n");
✅ 7. 사용 예 (C++)
#include <iostream> int main() { std::cout << "\033[1;32m초록색 텍스트\033[0m\n"; }
✅ 8. 사용 예 (Bash)
echo -e "\033[1;35;46m스타일 있는 글자\033[0m"
✅ 9. ANSI 리셋
모든 스타일 초기화는 항상 \033[0m으로 해줘야 함.
안 해주면 이후 출력도 전부 영향을 받게 됨.
반응형
'CS' 카테고리의 다른 글
| 더티 플래그 (Dirty Flag) (0) | 2025.08.08 |
|---|---|
| 유니코드 (1) | 2025.07.10 |
| 코드 컨벤션 (Code onvention) (0) | 2025.07.07 |
| .NET (0) | 2025.07.07 |
| C# (0) | 2025.07.07 |