最近我一直在使用Ruby的chr
和ord
方法,但有一些事情我不理解。
我的当前项目涉及将单个字符转换为序号值以及反过来。据我所知,如果我有一个带有单个字符(如“A”)的字符串,并在其上调用ord
,我将获得它在ASCII表上的位置,即65。调用反向方法65.chr
将给出字符值“A”,因此这告诉我Ruby中有一个有序的字符值集合,它可以使用此集合来给出特定字符的位置或特定位置处的字符。如果我错了,请纠正我。
现在我也明白Ruby的默认字符编码使用UTF-8,因此它可以处理数千种可能的字符。因此,如果我请求像这样的东西:
'好'.ord
我获得了该字符的位置,其值为22909。但是,如果我在该值上调用chr
函数:
22909.chr
我得到了"RangeError: 22909 超出字符范围."的错误。 我只能在扩展ASCII值为255的情况下使用char
。所以我的问题是:
- Ruby为什么似乎从扩展ASCII字符集获取
chr
值,而从UTF-8获取ord
值? - 是否有任何方法可以告诉Ruby在使用这些方法时使用不同的编码方式?例如,告诉它使用ASCII-8BIT编码而不是默认的编码方式?
- 如果可以更改默认编码方式,是否有办法获取正在使用的字符集中可用字符的总数?