是什麼紅寶石字符串函數的區別碼點: - 代碼點和字節字節VS在紅寶石
'abcd'.bytes
=> [97, 98, 99, 100]
'abcd'.codepoints
=> [97, 98, 99, 100]
是什麼紅寶石字符串函數的區別碼點: - 代碼點和字節字節VS在紅寶石
'abcd'.bytes
=> [97, 98, 99, 100]
'abcd'.codepoints
=> [97, 98, 99, 100]
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是一個單字節字符的編碼,所以在您的問題方法bytes
和codepoints
的示例中返回相同的值,重合。
因此,如果您需要將字符串拆分爲字符,請使用chars
或codepoints
(以適合您的用例爲準)。僅當您將字符串視爲不透明二進制blob而不是文本時才使用bytes
。
爲了驗證這些字節是否相應,你可以執行's.bytes.pack('c *')。force_encoding('UTF-8')== s'這應該是真的。 –
@sergio Tulentsev你可以告訴我爲什麼我們使用codepoints –
@ Vivakkumar:「我們爲什麼使用codepoints」 - 我們是誰,我們在哪裏使用它們?恐怕我不明白這個問題。你沒有看到更新的答案嗎? –
嘗試使用unicode字符串 –
添加到@ SergioTulentsev的評論'「\ u2713」.bytes = [226,156,147]',而''\ u2713「.codepoints = [10003]'。 –
@SergioTulentsev所以,codepoints是爲unicode字符串。那麼爲什麼中文字符會返回不同的結果 –