[Ruby] base64

SoNaR sonar at scli.ru
Thu May 8 11:10:59 MSD 2003


Hello Sergei,

Thursday, May 8, 2003, 10:58:14 AM, you wrote:

SD> On Thu, May 08, 2003 at 10:47:01AM +0400, SoNaR wrote:
>> Hello Sergei,
>> 
>> Thursday, May 8, 2003, 10:22:25 AM, you wrote:
>> 
>> SD> On Thu, May 08, 2003 at 09:48:27AM +0400, SoNaR wrote:
>> >> Hello ruby,
>> >> 
>> >>   Как мне перевести строчку 'yuDw4Pfg5eLuLdfl8Orl8fHo/y4' в нормальный
>> >>   читаемый вид?
>> >>   Делаю 'yuDw4Pfg5eLuLdfl8Orl8fHo/y4'.unpack("m")[0]
>> >>   и получаю
>> >>   "\312\340\360\340\367\340\345\342\356-\327\345\360\352\345\361\361\350"
>> >>   Вопрос: как получить из этого русскоязычный текст в кодировке
>> >>   win1251?
>> 
>> SD> Один из вариантов:
>> 
>> SD> #!/usr/bin/env ruby
>> 
>> SD> def win2koi(str)
>> SD>   return
>> SD> str.tr('АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя',
>> SD> 'бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС');
>> SD> end;
>> 
>> SD> puts win2koi('yuDw4Pfg5eLuLdfl8Orl8fHo/y4'.unpack("m")[0])
>> 
>> А в результате получаю nil...

SD> Хм. Видимо, vim не совсем корректно обошелся с этой строкой, а я не
SD> проконтролировал. Функция win2koi состоит из трех строк, на первой -
SD> определение ее, на второй - собственно тело, на третьей - end. То есть,
SD> выглядеть должно вот так:

SD> def win2koi(str)
SD>   str.tr('АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя', 'бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС');
SD> end
SD> return, насколько я помню, можно опустить.

Все правильно, но ты не учем маленькой мелочи... Входная строка у тебя
вида "\312\340\360\340\367\340\345\342\356-\327\345\360\352\345\361\361\350"
Соотвественно русских букв в ней просто нету!!! А как их получить?
ИМХО это Unicode, но я могу ошибаться.

-- 
Best regards,
 SoNaR                            mailto:sonar at scli.ru




More information about the Ruby mailing list