Encoding 클래스

Encoding 클래스

Encoding 인스턴스는 Ruby에서 사용할 수 있는 문자 인코딩을 나타내요. Encoding 네임스페이스 아래의 상수로 정의돼요. 이름과, 선택적으로 별칭(alias)을 가져요:

Encoding::US_ASCII.name # => "US-ASCII"
Encoding::US_ASCII.names # => ["US-ASCII", "ASCII", "ANSI_X3.4-1968", "646"]

인코딩을 인자로 받는 Ruby 메서드는 다음을 모두 받아들여요.

  • Encoding 객체.
  • 인코딩의 이름.
  • 인코딩 이름의 별칭.

이 세 가지는 동등해요:

'foo'.encode(Encoding::US_ASCII) # Encoding object.
'foo'.encode('US-ASCII') # Encoding name.
'foo'.encode('ASCII') # Encoding alias.

인코딩과 그 사용에 대한 전체 논의는 Encodings 문서를 참고하세요.

Encoding::ASCII_8BIT은 특수 목적 인코딩으로, 보통 문자 문자열이 아니라 바이트 문자열에 쓰여요. 이름이 가리키듯 ASCII 범위의 문자는 ASCII 문자로 취급돼요. 다른 ASCII 호환 인코딩을 쓸 때 유용해요.

출처: Ruby 3.3 API

본문

클래스 메서드

  • aliases → {"alias1" => "orig1", "alias2" → "orig2", ...} — 사용 가능한 인코딩 별칭과 원래 인코딩 이름의 해시를 돌려줘요.
Encoding.aliases
#=> {"BINARY"=>"ASCII-8BIT", "ASCII"=>"US-ASCII", "ANSI_X3.4-1968"=>"US-ASCII",
     "SJIS"=>"Windows-31J", "eucJP"=>"EUC-JP", "CP932"=>"Windows-31J"}
  • compatible?(obj1, obj2) → enc or nil — 두 객체의 호환성을 검사해요. 둘 다 문자열이면 이어붙일(concatenatable) 수 있을 때 호환돼요. 호환되면 이어붙인 문자열의 인코딩을 돌려주고, 아니면 nil을 돌려줘요.
Encoding.compatible?("\xa1".force_encoding("iso-8859-1"), "b")
#=> #<Encoding:ISO-8859-1>

Encoding.compatible?(
  "\xa1".force_encoding("iso-8859-1"),
  "\xa1\xa1".force_encoding("euc-jp"))
#=> nil
  • default_external → enc — 기본 외부 인코딩을 돌려줘요. CSV, 디스크에서 읽은 File 데이터, SDBM, StringIO, Zlib::GzipReader/Writer, String#inspect, Regexp#inspect 등에서 만든 문자열에 기본으로 사용돼요. -E 옵션으로 초기화돼요. -E가 설정되지 않으면 Windows에선 UTF-8, 다른 OS에선 로케일로 초기화돼요.
  • default_external = enc — 기본 외부 인코딩을 설정해요. 값 변경 전에 만든 문자열과 이후에 만든 문자열의 인코딩이 달라질 수 있으니, ruby 코드에서 직접 설정하기보다 ruby -E로 실행하는 편이 좋아요.
  • default_internal → enc — 기본 내부 인코딩을 돌려줘요. 기본 내부 인코딩이 nil이 아니면 여러 곳에서 문자열이 이 인코딩으로 트랜스코딩돼요. 예를 들어 CSV, 디스크에서 읽은 File 데이터, Dir의 파일 이름, Integer#chr, ENV의 값, $PROGRAM_NAME을 포함한 ARGV 값 등이에요. 추가로 String#encodeString#encode!는 인코딩이 주어지지 않으면 기본 내부 인코딩을 사용해요. -E 옵션으로 초기화되고 그 외엔 nil이에요.
  • default_internal = enc or nil — 기본 내부 인코딩을 설정하거나, nil을 주면 제거해요.
  • find(string) → enc — 지정된 이름으로 인코딩을 검색해요. name은 문자열이어야 해요. Encoding.find("US-ASCII") #=> #<Encoding:US-ASCII> 인코딩 이름과 별칭을 받아들이며, "external", "internal", "locale", "filesystem" 같은 특수 별칭도 받아요. 이름이 없으면 ArgumentError가 발생해요. 다만 Encoding.find("internal")만은 Ruby에 기본 내부 인코딩이 없을 때 nil을 돌려줘요.
  • list → [enc1, enc2, ...] — 로드된 인코딩의 목록을 돌려줘요.
  • locale_charmap → string — 로케일 charmap 이름을 돌려줘요. 적절한 정보가 없으면 nil을 돌려줘요. 결과는 플랫폼 의존적이라 Encoding.find(Encoding.locale_charmap)이 오류를 낼 수도 있어요. 알 수 없는 로케일에서도 인코딩 객체가 필요하면 Encoding.find("locale")을 쓸 수 있어요.
  • name_list → ["enc1", "enc2", ...] — 사용 가능한 인코딩 이름의 목록을 돌려줘요.

인스턴스 메서드

  • ascii_compatible? → true or false — ASCII 호환 여부를 돌려줘요. Encoding::UTF_8.ascii_compatible? #=> true, Encoding::UTF_16BE.ascii_compatible? #=> false
  • dummy? → true or false — dummy 인코딩이면 true를 돌려줘요. dummy 인코딩은 문자 처리가 제대로 구현되지 않은 인코딩으로, 상태 기반(stateful) 인코딩에 쓰여요. Encoding::ISO_2022_JP.dummy? #=> true, Encoding::UTF_8.dummy? #=> false
  • inspect → string — 프로그래머를 위한 인코딩 표현 문자열을 돌려줘요. Encoding::UTF_8.inspect #=> "#<Encoding:UTF-8>"
  • name → string (to_s의 별칭) — 인코딩의 이름을 돌려줘요. Encoding::UTF_8.name #=> "UTF-8"
  • names → array — 인코딩의 이름과 별칭 목록을 돌려줘요. Encoding::WINDOWS_31J.names #=> ["Windows-31J", "CP932", "csWindows31J", "SJIS", "PCK"]
  • to_s → string (name의 별칭) — 인코딩의 이름을 돌려줘요.

더 알아보기