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的“转义”字符,用来表示多字节序列的开始。 –