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 객체.
'foo'.encode('US-ASCII') # Encoding 이름.
'foo'.encode('ASCII') # Encoding 별칭.
인코딩과 그 사용법에 대한 자세한 내용은 Encodings 문서를 참고하세요.
Encoding::ASCII_8BIT는 특수 목적의 인코딩이에요. 문자 문자열이 아니라 주로 바이트 문자열에 쓰이죠. 이름이 말해 주듯 ASCII 범위의 문자는 ASCII 문자로 취급되는데, 다른 ASCII 호환 인코딩을 쓸 때 유용해요.
상수
UNICODE_VERSION— 지원되는 Unicode 버전.
속성
name[R]— 인코딩의 이름:Encoding::UTF_8.name #=> "UTF-8"to_s[R]— 인코딩의 이름:Encoding::UTF_8.name #=> "UTF-8"
클래스 메서드
-
aliases → {"alias1" => "orig1", ...}— 사용 가능한 인코딩 별칭과 원래 인코딩 이름의 해시를 돌려줘요.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— 두 객체의 호환성을 확인해요. 두 객체가 모두 문자열이라면, 서로 연결(concat)할 수 있을 때 호환되는 거예요. 호환되면 연결된 문자열의 인코딩을 돌려주고, 아니면 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객체가 문자열이 아니라면, 인코딩을 갖고 있고 다음 조건 중 하나를 만족할 때 호환돼요:
- 둘 중 한 인코딩이 US-ASCII 호환
- 둘 중 한 인코딩이 7비트 인코딩
-
default_external → enc— 기본 외부 인코딩(default external encoding)을 돌려줘요. 이 인코딩은 기본적으로 다음 위치에서 만들어지는 문자열에 적용돼요: CSV, 디스크에서 읽는File데이터, SDBM,StringIO,Zlib::GzipReader,Zlib::GzipWriter,String#inspect,Regexp#inspect. 이런 곳에서 만들어진 문자열이 이 인코딩을 가지더라도 그 인코딩이 유효하리라는 보장은 없어요.String#valid_encoding?으로 꼭 확인하세요.디스크에 쓰는
File데이터는default_internal이 nil이 아니면, 쓸 때 기본 외부 인코딩으로 트랜스코딩돼요.기본 외부 인코딩은
-E옵션으로 초기화돼요.-E가 없으면 Windows에서는 UTF-8, 다른 운영체제에서는 로케일로 초기화돼요. -
default_external = enc— 기본 외부 인코딩을 설정해요. Ruby 코드에서Encoding::default_external을 직접 설정하는 건 권장하지 않아요. 값을 바꾸기 전에 만들어진 문자열과 바뀐 뒤 만들어진 문자열의 인코딩이 달라질 수 있거든요. 대신ruby -E로 올바른 default_external을 지정해 시작하는 게 좋아요. -
default_internal → enc— 기본 내부 인코딩(default internal encoding)을 돌려줘요. default_internal이 nil이 아니라면 문자열은 다음 위치에서 기본 내부 인코딩으로 트랜스코딩돼요: CSV,Etc.sysconfdir/Etc.systmpdir, 디스크에서 읽는File데이터,Dir의File이름,Integer#chr,String#inspect/Regexp#inspect, Readline이 돌려주는 문자열, SDBM이 돌려주는 문자열,Time#zone,ENV의 값,$PROGRAM_NAME을 포함한 ARGV의 값.추가로
String#encode/String#encode!는 인코딩을 주지 않으면 기본 내부 인코딩을 사용해요. 만들어진 문자열의 인코딩으로는default_internal이 아니라 스크립트 인코딩(__ENCODING__)이 쓰여요.Encoding::default_internal은-E옵션으로 초기화되고, 없으면 nil이에요. -
default_internal = enc or nil— 기본 내부 인코딩을 설정하거나, nil을 주면 제거해요. 앞서와 마찬가지로 Ruby 코드에서 직접 설정하기보다ruby -E로 올바른 default_internal을 지정해 시작하는 걸 권장해요. -
find(string) → enc— 지정된 name으로 인코딩을 찾아요. name은 문자열이어야 해요.Encoding.find("US-ASCII") #=> #<Encoding:US-ASCII>이 메서드가 받는 이름은 인코딩 이름과 별칭이며, 특수 별칭도 포함해요:
"external"(기본 외부 인코딩),"internal"(기본 내부 인코딩),"locale"(로케일 인코딩),"filesystem"(파일시스템 인코딩). name에 해당하는 인코딩이 없으면ArgumentError가 발생해요. 다만Encoding.find("internal")만은 예외로, "internal"이라는 이름의 인코딩이 없을 때(즉 기본 내부 인코딩이 없을 때) nil을 돌려줘요. -
list → [enc1, enc2, ...]— 로드된 인코딩 목록을 돌려줘요.Encoding.list #=> [#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, #<Encoding:ISO-2022-JP (dummy)>] Encoding.find("US-ASCII") #=> #<Encoding:US-ASCII> Encoding.list #=> [#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, #<Encoding:US-ASCII>, #<Encoding:ISO-2022-JP (dummy)>] -
locale_charmap → string— 로케일 charmap 이름을 돌려줘요. 적절한 정보가 없으면 nil을 돌려줘요.Debian GNU/Linux LANG=C Encoding.locale_charmap #=> "ANSI_X3.4-1968" LANG=ja_JP.EUC-JP Encoding.locale_charmap #=> "EUC-JP" SunOS 5 LANG=C Encoding.locale_charmap #=> "646" LANG=ja Encoding.locale_charmap #=> "eucJP"결과가 플랫폼에 크게 의존해요. 그래서
Encoding.find(Encoding.locale_charmap)가 오류를 낼 수도 있어요. 알 수 없는 로케일이어도 인코딩 객체가 필요하다면Encoding.find("locale")를 쓰면 돼요. -
name_list → ["enc1", "enc2", ...]— 사용 가능한 인코딩 이름 목록을 돌려줘요.Encoding.name_list #=> ["US-ASCII", "ASCII-8BIT", "UTF-8", "ISO-8859-1", "Shift_JIS", "EUC-JP", "Windows-31J", "BINARY", "CP932", "eucJP"]
인스턴스 메서드
-
ascii_compatible? → true or false— ASCII 호환 여부를 돌려줘요.Encoding::UTF_8.ascii_compatible? #=> true Encoding::UTF_16BE.ascii_compatible? #=> false -
dummy? → true or false— 더미(dummy) 인코딩이면 true를 돌려줘요. 더미 인코딩은 문자 처리가 제대로 구현되지 않은 인코딩이에요. 상태를 가진(stateful) 인코딩에 쓰여요.Encoding::ISO_2022_JP.dummy? #=> true Encoding::UTF_8.dummy? #=> false -
inspect → string— 프로그래머를 위한 인코딩 표현 문자열을 돌려줘요.Encoding::UTF_8.inspect #=> "#<Encoding:UTF-8>" Encoding::ISO_2022_JP.inspect #=> "#<Encoding:ISO-2022-JP (dummy)>" -
names → array— 인코딩의 이름과 별칭 목록을 돌려줘요.Encoding::WINDOWS_31J.names #=> ["Windows-31J", "CP932", "csWindows31J", "SJIS", "PCK"]