Pracuję ostatnio z metodami Ruby chr
i ord
i jest kilka rzeczy, których nie rozumiem.Próba zrozumienia metod Ruby .chr i .ord
Mój obecny projekt obejmuje konwersję pojedynczych znaków do wartości porządkowych i od wartości porządkowych. Jak rozumiem, jeśli mam ciąg znaków z indywidualnym znakiem, takim jak "A" i nazywam go ord
, otrzymuję jego pozycję w tabeli ASCII, która wynosi 65. Wywołanie odwrotności, 65.chr
daje mi wartość znaku "A", więc to mówi mi, że Ruby ma kolekcję gdzieś z uporządkowanych wartości znaków, i może użyć tej kolekcji, by podać mi pozycję konkretnej postaci lub postaci na określonej pozycji. Mogę się mylić, proszę, popraw mnie, jeśli tak.
Teraz rozumiem również, że domyślne kodowanie znaków Ruby wykorzystuje UTF-8, dzięki czemu może pracować z tysiącami możliwych znaków. Jeśli więc pytam go o coś takiego:
'好'.ord
uzyskać pozycję tego znaku, który jest 22909. Jednakże, jeśli zadzwonię chr
na tej wartości:
22909.chr
otrzymuję „RangeError: 22909 poza zasięgiem char. " Mogę uzyskać tylko char
do pracy na wartościach do 255, które są rozszerzone ASCII. Więc moje pytania to:
- Dlaczego Ruby wydają się być coraz wartości
chr
z rozszerzonego znak ASCII ustawiony aleord
z UTF-8? - Czy jest jakiś sposób, aby powiedzieć Ruby, aby używała różnych kodowań, gdy używa tych metod? Na przykład, powiedz, aby używać kodowania ASCII-8BIT zamiast tego, do czego jest domyślne?
- Jeśli istnieje możliwość zmiany domyślnego kodowania, czy istnieje sposób uzyskania całkowitej liczby znaków dostępnych w używanym zestawie?
http://apidock.com/ruby/Integer/chr wspomina, że możesz użyć czegoś takiego jak '' 22909.chr (Encoding :: UTF_8) ''. Kodowanie ma również '' Kodowanie :: ASCII_8BIT'', jeśli chcesz go użyć zamiast tego. –
@NabeelAmjad Powinieneś opublikować to jako odpowiedź. –
To bardzo pomocne, nie widziałem tego, a to doprowadza mnie daleko do miejsca, do którego zmierzam. Jedyne, czego mi brakuje to prosty sposób na uzyskanie liczby znaków dostępnych dla określonego kodowania. Na przykład ASCII_8BIT ma 256 znaków, UTF_8 około 1.1 milion, ect. I tak, proszę zaksięguj to jako odpowiedź. –