CS

ANSI

khh7052 2025. 7. 22. 21:24
반응형

✅ ANSI란?

ANSIAmerican 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"는 다음 두 가지 문맥에서 쓰임:

  1. ANSI 인코딩
    • 윈도우 환경에서의 로컬 문자셋 기반 8비트 인코딩
    • 예: EUC-KR, Windows-1252
    • 하지만 현대 기준에선 애매하고 구식.
    • UTF-8이 ANSI 인코딩을 거의 대체함.
  2. 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