Ich habe die folgende Datei:Encoding Säumigen zu ASCII-8BIT
# encoding: UTF-8
a = 1 << 7
puts a.chr.encoding
Das gibt mir ASCII-8BIT
zurück. Warum gibt das nicht UTF-8
zurück und ich würde erwarten? (UTF ist identisch mit ASCII dort)
Ich habe die folgende Datei:Encoding Säumigen zu ASCII-8BIT
# encoding: UTF-8
a = 1 << 7
puts a.chr.encoding
Das gibt mir ASCII-8BIT
zurück. Warum gibt das nicht UTF-8
zurück und ich würde erwarten? (UTF ist identisch mit ASCII dort)
chr
hat einen Codierungsparameter, auf die US-ASCII Verzug, wenn char < 0x80
und ASCII-8BIT für < 0xff
ist:
65.chr.encoding # => #<Encoding:US-ASCII>
128.chr.encoding # => #<Encoding:ASCII-8BIT>
255.chr.encoding # => #<Encoding:ASCII-8BIT>
256.chr.encoding # => RangeError: 256 out of char range
Encoding.default_internal = Encoding::UTF_8
65.chr.encoding # => #<Encoding:US-ASCII>
255.chr.encoding # => #<Encoding:ASCII-8BIT>
256.chr.encoding # => #<Encoding:UTF-8>
65.chr(Encoding::UTF_8).encoding # => #<Encoding:UTF-8>
128.chr(Encoding::UTF_8).encoding # => #<Encoding:UTF-8>
500.chr(Encoding::UTF_8).encoding # => #<Encoding:UTF-8>
Beachten Sie, dass [ASCII] (https://en.wikipedia.org/wiki/ASCII) nur 128 Zeichen definiert. 'chr' gibt daher' US-ASCII' für 7-Bit-Codes (0..127) und 'ASCII-8BIT' für 8-Bit-Codes (128..255) standardmäßig zurück. – Stefan
weil ASCII- Zeichen 0-> 127 und UTF -8 Zeichen 0-> 127 sind identisch. utf8 ** IS ** 7bit ascii, wenn nur die ersten 128 Zeichen berücksichtigt werden. utf8 kommt nur ins Spiel, wenn das High-Bit in dem Byte gesetzt ist, das utf8s "Escape" -Char ist, um den Start einer Multibyte-Sequenz zu signalisieren. –