字节与红宝石中的代码点

时间:2016-11-28 16:36:43

标签: ruby

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

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

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

1 个答案:

答案 0 :(得分:10)

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

s = '日本語'
s.bytes # => [230, 151, 165, 230, 156, 172, 232, 170, 158]
s.codepoints # => [26085, 26412, 35486]
s.chars # => ["日", "本", "語"]

我看到你的困惑出现在哪里。 Ruby现在默认使用utf-8编码,utf-8是专门设计的,因此它的第一个代码点(0-127)完全与ASCII编码相同。 ASCII是一种具有单字节字符的编码,因此在您的问题示例中,方法bytescodepoints会返回相同的值,同时

因此,如果您需要将字符串分解为字符,请使用charscodepoints(适用于您的用例)。仅当将字符串视为不透明的二进制blob而不是文本时,才使用bytes