Tôi đã làm việc với các phương thức Ruby chr
và ord
gần đây và có một vài điều tôi không hiểu.Cố gắng hiểu các phương thức Ruby .chr và .ord
Dự án hiện tại của tôi liên quan đến việc chuyển đổi các ký tự riêng lẻ sang và từ các giá trị thứ tự. Như tôi đã hiểu, nếu tôi có một chuỗi ký tự riêng lẻ như "A" và tôi gọi ord
trên đó, tôi nhận được vị trí của nó trên bảng ASCII là 65. Gọi ngược, 65.chr
cho tôi giá trị ký tự "A", do đó, điều này cho tôi biết rằng Ruby có một bộ sưu tập ở đâu đó có giá trị ký tự đặt hàng và có thể sử dụng bộ sưu tập này để cho tôi vị trí của một nhân vật cụ thể hoặc nhân vật ở một vị trí cụ thể. Tôi có thể sai về điều này, xin vui lòng sửa tôi nếu tôi.
Bây giờ tôi cũng hiểu rằng mã hóa ký tự mặc định của Ruby sử dụng UTF-8 để nó có thể hoạt động với hàng nghìn ký tự có thể. Vì vậy, nếu tôi hỏi nó cho một cái gì đó như thế này:
'好'.ord
tôi có được vị trí của nhân vật đó là 22909. Tuy nhiên, nếu tôi gọi chr
trên giá trị đó:
22909.chr
tôi nhận được "RangeError: 22909 ra khỏi phạm vi char. " Tôi chỉ có thể nhận được char
để làm việc trên các giá trị tối đa 255 được mở rộng ASCII. Vì vậy, câu hỏi của tôi là:
- Tại sao của Ruby dường như là việc giá trị cho
chr
từ ký tự ASCII mở rộng thiết lập nhưngord
từ UTF-8? - Có cách nào để yêu cầu Ruby sử dụng các mã hóa khác nhau khi sử dụng các phương pháp này không? Ví dụ, nói với nó để sử dụng mã hóa ASCII-8BIT thay vì bất cứ điều gì nó mặc định?
- Nếu có thể thay đổi mã hóa mặc định, có cách nào để nhận tổng số ký tự có sẵn trong tập hợp đang được sử dụng không?
http://apidock.com/ruby/Integer/chr đề cập đến bạn có thể sử dụng một cái gì đó như '' 22909.chr (Encoding :: UTF_8) ''. Mã hóa cũng có '' Encoding :: ASCII_8BIT'' nếu bạn muốn sử dụng nó thay thế. –
@NabeelAmjad Bạn nên đăng câu trả lời đó. –
Điều này là rất hữu ích, tôi đã không nhìn thấy điều đó và điều này giúp tôi có được một chặng đường dài đến nơi tôi đang đi. Bây giờ, điều duy nhất tôi đang thiếu là một cách đơn giản để có được số ký tự sẵn có cho một mã hóa cụ thể. Ví dụ ASCII_8BIT có 256 ký tự, UTF_8 khoảng 1.1 triệu, ect. Và có, xin vui lòng gửi nó như là một câu trả lời. –