1
我有以下文件:編碼默認到ASCII-8BIT
# encoding: UTF-8
a = 1 << 7
puts a.chr.encoding
這讓我回ASCII-8BIT
。爲什麼這不會退回UTF-8
我期望?
我有以下文件:編碼默認到ASCII-8BIT
# encoding: UTF-8
a = 1 << 7
puts a.chr.encoding
這讓我回ASCII-8BIT
。爲什麼這不會退回UTF-8
我期望?
chr
具有編碼參數,默認爲US-ASCII,當炭是< 0x80
和ASCII-8BIT爲< 0xff
(有UTF是相同的ASCII):
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>
請注意[ASCII](https://en.wikipedia.org/wiki/ASCII)僅定義了128個字符。因此默認情況下,'chr'因此會返回7位代碼(0..127)的「US-ASCII」和8位代碼(128..255)的ASCII-8BIT。 – Stefan
因爲ASCII字符0-> 127和UTF -8個字符0-> 127是相同的。 utf8 ** IS ** 7bit ascii,只考慮前128個字符。 utf8只在它設置的字節中的高位發揮作用時,它是utf8的「轉義」字符,用來表示多字節序列的開始。 –