class Encoding
Eine Encoding-Instanz repräsentiert eine in Ruby verwendbare Zeichenkodierung. Sie wird als Konstante unter dem Encoding-Namensraum definiert. Sie hat einen Namen und optional Aliase.
Encoding::US_ASCII.name # => "US-ASCII" Encoding::US_ASCII.names # => ["US-ASCII", "ASCII", "ANSI_X3.4-1968", "646"]
Eine Ruby-Methode, die eine Kodierung als Argument akzeptiert, akzeptiert
-
Ein Encoding-Objekt.
-
Der Name einer Kodierung.
-
Ein Alias für einen Kodierungsnamen.
Diese sind äquivalent
'foo'.encode(Encoding::US_ASCII) # Encoding object. 'foo'.encode('US-ASCII') # Encoding name. 'foo'.encode('ASCII') # Encoding alias.
Für eine vollständige Erörterung von Kodierungen und deren Verwendung siehe das Encodings-Dokument.
Encoding::ASCII_8BIT ist eine spezielle Kodierung, die normalerweise für eine Zeichenfolge von Bytes verwendet wird, nicht für eine Zeichenfolge von Zeichen. Aber wie der Name schon sagt, werden ihre Zeichen im ASCII-Bereich als ASCII-Zeichen betrachtet. Dies ist nützlich, wenn Sie andere ASCII-kompatible Kodierungen verwenden.
Constants
- UNICODE_VERSION
-
Die unterstützte Unicode-Version.
Attribute
Der Name der Kodierung.
Encoding::UTF_8.name #=> "UTF-8"
Der Name der Kodierung.
Encoding::UTF_8.name #=> "UTF-8"
Öffentliche Klassenmethoden
Source
static VALUE
rb_enc_aliases(VALUE klass)
{
VALUE aliases[2];
aliases[0] = rb_hash_new();
aliases[1] = rb_ary_new();
GLOBAL_ENC_TABLE_LOCKING(enc_table) {
st_foreach(enc_table->names, rb_enc_aliases_enc_i, (st_data_t)aliases);
}
return aliases[0];
}
Gibt den Hash der verfügbaren Kodierungsaliase und Originalkodierungsnamen zurück.
Encoding.aliases
#=> {"BINARY"=>"ASCII-8BIT", "ASCII"=>"US-ASCII", "ANSI_X3.4-1968"=>"US-ASCII",
"SJIS"=>"Windows-31J", "eucJP"=>"EUC-JP", "CP932"=>"Windows-31J"}
Source
static VALUE
enc_compatible_p(VALUE klass, VALUE str1, VALUE str2)
{
rb_encoding *enc;
if (!enc_capable(str1)) return Qnil;
if (!enc_capable(str2)) return Qnil;
enc = rb_enc_compatible(str1, str2);
if (!enc) return Qnil;
return rb_enc_from_encoding(enc);
}
Überprüft die Kompatibilität zweier Objekte.
Wenn die Objekte beides Strings sind, sind sie kompatibel, wenn sie verkettbar sind. Die Kodierung des verketteten Strings wird zurückgegeben, wenn sie kompatibel sind, nil, wenn nicht.
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
Wenn die Objekte keine Strings sind, sind ihre Kodierungen kompatibel, wenn sie eine Kodierung haben und
-
Entweder ist die Kodierung ASCII-kompatibel
-
Eine der Kodierungen ist eine 7-Bit-Kodierung
Source
static VALUE
get_default_external(VALUE klass)
{
return rb_enc_default_external();
}
Gibt die Standard-Externe-Kodierung zurück.
Die Standard-Externe-Kodierung wird standardmäßig für Strings verwendet, die aus den folgenden Speicherorten erstellt wurden:
-
CSV
-
File-Daten, die von der Festplatte gelesen wurden -
SDBM
Während Strings, die aus diesen Speicherorten erstellt wurden, diese Kodierung haben, ist die Kodierung möglicherweise nicht gültig. Stellen Sie sicher, dass Sie String#valid_encoding? überprüfen.
File-Daten, die auf die Festplatte geschrieben werden, werden in die Standard-Externe-Kodierung transkodiert, wenn sie geschrieben werden, wenn default_internal nicht nil ist.
Die Standard-Externe-Kodierung wird durch die Option -E initialisiert. Wenn -E nicht gesetzt ist, wird sie unter Windows auf UTF-8 und auf anderen Betriebssystemen auf die Locale initialisiert.
Source
static VALUE
set_default_external(VALUE klass, VALUE encoding)
{
rb_warning("setting Encoding.default_external");
rb_enc_set_default_external(encoding);
return encoding;
}
Legt die Standard-Externe-Kodierung fest. Sie sollten Encoding::default_external nicht im Ruby-Code festlegen, da Strings, die vor der Änderung des Werts erstellt wurden, eine andere Kodierung haben können als Strings, die nach der Änderung des Werts erstellt wurden. Stattdessen sollten Sie ruby -E verwenden, um Ruby mit der richtigen default_external zu starten.
Siehe Encoding::default_external für Informationen darüber, wie die Standard-Externe-Kodierung verwendet wird.
Source
static VALUE
get_default_internal(VALUE klass)
{
return rb_enc_default_internal();
}
Gibt die Standard-Interne-Kodierung zurück. Strings werden in die Standard-Interne-Kodierung an den folgenden Stellen transkodiert, wenn die Standard-Interne-Kodierung nicht nil ist:
-
CSV
-
File-Daten, die von der Festplatte gelesen wurden -
Strings, die von Readline zurückgegeben werden
-
Strings, die von SDBM zurückgegeben werden
-
Werte aus
ENV -
Werte in ARGV einschließlich $PROGRAM_NAME
Zusätzlich verwenden String#encode und String#encode! die Standard-Interne-Kodierung, wenn keine Kodierung angegeben ist.
Das Skript-Encoding (__ENCODING__), nicht default_internal, wird als Kodierung der erstellten Strings verwendet.
Encoding::default_internal wird mit der Option -E oder andernfalls mit nil initialisiert.
Source
static VALUE
set_default_internal(VALUE klass, VALUE encoding)
{
rb_warning("setting Encoding.default_internal");
rb_enc_set_default_internal(encoding);
return encoding;
}
Legt die Standard-Interne-Kodierung fest oder entfernt die Standard-Interne-Kodierung, wenn nil übergeben wird. Sie sollten Encoding::default_internal nicht im Ruby-Code festlegen, da Strings, die vor der Änderung des Werts erstellt wurden, eine andere Kodierung haben können als Strings, die nach der Änderung erstellt wurden. Stattdessen sollten Sie ruby -E verwenden, um Ruby mit der richtigen default_internal zu starten.
Siehe Encoding::default_internal für Informationen darüber, wie die Standard-Interne-Kodierung verwendet wird.
Source
static VALUE
enc_find(VALUE klass, VALUE enc)
{
int idx;
if (is_obj_encoding(enc))
return enc;
idx = str_to_encindex(enc);
if (idx == UNSPECIFIED_ENCODING) return Qnil;
return rb_enc_from_encoding_index(idx);
}
Sucht die Kodierung mit dem angegebenen *Namen*. *Name* sollte ein String sein.
Encoding.find("US-ASCII") #=> #<Encoding:US-ASCII>
Namen, die diese Methode akzeptiert, sind Kodierungsnamen und Aliase, einschließlich der folgenden speziellen Aliase:
- “external”
-
Standard-Externe-Kodierung
- “internal”
-
Standard-Interne-Kodierung
- “locale”
-
Locale-Kodierung
- “filesystem”
-
Dateisystem-Kodierung
Ein ArgumentError wird ausgelöst, wenn keine Kodierung mit *Namen* gefunden wird. Nur Encoding.find("internal") gibt jedoch nil zurück, wenn keine Kodierung namens "internal" existiert, mit anderen Worten, wenn Ruby keine Standard-Interne-Kodierung hat.
Source
static VALUE
enc_list(VALUE klass)
{
VALUE list = RUBY_ATOMIC_VALUE_LOAD(rb_encoding_list);
return rb_ary_dup(list);
}
Gibt die Liste der geladenen Kodierungen zurück.
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)>]
Source
VALUE
rb_locale_charmap(VALUE klass)
{
#if NO_LOCALE_CHARMAP
return rb_usascii_str_new_cstr("US-ASCII");
#else
return locale_charmap(rb_usascii_str_new_cstr);
#endif
}
Gibt den Namen der Locale-Zeichensatzes zurück. Er gibt nil zurück, wenn keine geeigneten Informationen vorhanden sind.
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"
Das Ergebnis ist stark plattformabhängig. Daher kann Encoding.find(Encoding.locale_charmap) einen Fehler verursachen. Wenn Sie ein Encoding-Objekt benötigen, auch für eine unbekannte Locale, kann Encoding.find("locale") verwendet werden.
Source
static VALUE
rb_enc_name_list(VALUE klass)
{
VALUE ary;
GLOBAL_ENC_TABLE_LOCKING(enc_table) {
ary = rb_ary_new2(enc_table->names->num_entries);
st_foreach(enc_table->names, rb_enc_name_list_i, (st_data_t)ary);
}
return ary;
}
Gibt die Liste der verfügbaren Kodierungsnamen zurück.
Encoding.name_list
#=> ["US-ASCII", "ASCII-8BIT", "UTF-8",
"ISO-8859-1", "Shift_JIS", "EUC-JP",
"Windows-31J",
"BINARY", "CP932", "eucJP"]
Öffentliche Instanzmethoden
Source
static VALUE
enc_ascii_compatible_p(VALUE enc)
{
return RBOOL(rb_enc_asciicompat(must_encoding(enc)));
}
Gibt zurück, ob ASCII-kompatibel oder nicht.
Encoding::UTF_8.ascii_compatible? #=> true Encoding::UTF_16BE.ascii_compatible? #=> false
Source
static VALUE
enc_dummy_p(VALUE enc)
{
return RBOOL(ENC_DUMMY_P(must_encoding(enc)));
}
Gibt true für Dummy-Kodierungen zurück. Eine Dummy-Kodierung ist eine Kodierung, für die die Zeichenbehandlung nicht ordnungsgemäß implementiert ist. Sie wird für zustandsbehaftete Kodierungen verwendet.
Encoding::ISO_2022_JP.dummy? #=> true Encoding::UTF_8.dummy? #=> false
Source
static VALUE
enc_inspect(VALUE self)
{
rb_encoding *enc;
if (!is_data_encoding(self)) {
not_encoding(self);
}
if (!(enc = RTYPEDDATA_GET_DATA(self)) || rb_enc_from_index(rb_enc_to_index(enc)) != enc) {
rb_raise(rb_eTypeError, "broken Encoding");
}
return rb_enc_sprintf(rb_usascii_encoding(),
"#<%"PRIsVALUE":%s%s%s>", rb_obj_class(self),
rb_enc_inspect_name(enc),
(ENC_DUMMY_P(enc) ? " (dummy)" : ""),
rb_enc_autoload_p(enc) ? " (autoload)" : "");
}
Gibt einen String zurück, der die Kodierung für Programmierer repräsentiert.
Encoding::UTF_8.inspect #=> "#<Encoding:UTF-8>" Encoding::ISO_2022_JP.inspect #=> "#<Encoding:ISO-2022-JP (dummy)>"
Source
static VALUE
enc_names(VALUE self)
{
VALUE args[2];
args[0] = (VALUE)rb_to_encoding_index(self);
args[1] = rb_ary_new2(0);
GLOBAL_ENC_TABLE_LOCKING(enc_table) {
st_foreach(enc_table->names, enc_names_i, (st_data_t)args);
}
return args[1];
}
Gibt die Liste der Namen und Aliase der Kodierung zurück.
Encoding::WINDOWS_31J.names #=> ["Windows-31J", "CP932", "csWindows31J", "SJIS", "PCK"]