gpt4 book ai didi

ruby - 试图理解 Ruby .chr 和 .ord 方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:37 24 4
gpt4 key购买 nike

我最近一直在使用 Ruby chrord 方法,有几件事我不明白。

我当前的项目涉及将单个字符与序数值相互转换。据我了解,如果我有一个带有“A”之类的单个字符的字符串,并且我在其上调用 ord 我会得到它在 ASCII 表中的位置,即 65。调用逆函数, 65.chr 给我字符值“A”,所以这告诉我 Ruby 在某个地方有一个有序字符值的集合,它可以使用这个集合来给我一个特定字符的位置,或者字符在一个特定的位置。我在这方面可能是错误的,如果我错了请纠正我。

现在我也了解到 Ruby 的默认字符编码使用 UTF-8,因此它可以处理数千种可能的字符。因此,如果我向它询问这样的事情:

'好'.ord

我得到了该字符的位置,即 22909。但是,如果我对该值调用 chr:

22909.chr

我收到“RangeError:22909 超出字符范围。”我只能让 char 处理最大为 255 的扩展 ASCII 值。所以我的问题是:

  • 为什么 Ruby 似乎从扩展 ASCII 字符集中获取 chr 的值,但从 UTF-8 获取 ord 的值?
  • 有没有办法告诉 Ruby 在使用这些方法时使用不同的编码?例如,告诉它使用 ASCII-8BIT 编码而不是默认的编码?
  • 如果可以更改默认编码,是否有任何方法可以获取正在使用的集中可用字符的总数?

最佳答案

根据 Integer#chr您可以使用以下命令强制编码为 UTF_8。

22909.chr(Encoding::UTF_8)
#=> "好"

列出所有可用的编码名称

Encoding.name_list
#=> ["ASCII-8BIT", "UTF-8", "US-ASCII", "UTF-16BE", "UTF-16LE", "UTF-32BE", "UTF-32LE", "UTF-16", "UTF-32", ...]

一种获取最大字符数的 hacky 方法

2000000.times.reduce(0) do |x, i|
begin
i.chr(Encoding::UTF_8)
x += 1
rescue
end

x
end
#=> 1112064

关于ruby - 试图理解 Ruby .chr 和 .ord 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com