字节与红宝石中的代码点

Viv*_*mar 4 ruby

ruby字符串函数之间的区别是: - 代码点和字节

'abcd'.bytes
=> [97, 98, 99, 100]

'abcd'.codepoints
=> [97, 98, 99, 100]
Run Code Online (Sandbox Code Playgroud)

Ser*_*sev 10

bytes无论字符大小如何,都返回单个字节,而codepoints返回unicode代码点.

s = '???'
s.bytes # => [230, 151, 165, 230, 156, 172, 232, 170, 158]
s.codepoints # => [26085, 26412, 35486]
s.chars # => ["?", "?", "?"]
Run Code Online (Sandbox Code Playgroud)

我看到你的混乱来自何处.Ruby现在默认使用utf-8编码,而utf-8是专门设计的,因此它的第一个代码点(0-127)与ASCII编码完全相同.ASCII是单字节字符的编码,所以在你的问题的方法的例子bytes,并codepoints返回相同的数值,coincindentally.

因此,如果您需要将字符串分解为字符,请使用charscodepoints(适用于您的用例).使用bytes只有当你把字符串作为一个不透明的二进制BLOB,而不是文字.