[Ruby] base64
SoNaR
sonar at scli.ru
Thu May 8 11:37:32 MSD 2003
Hello Sergei,
Thursday, May 8, 2003, 11:12:25 AM, you wrote:
SD> On Thu, May 08, 2003 at 11:10:59AM +0400, SoNaR wrote:
>> 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, но я могу ошибаться.
SD> Не знаю, как это выглядит под Windows, и что Windows почитает за Unicode,
SD> но, по-моему, это нифига не уникод, по крайней мере, под Linux у меня. И
SD> входная строка, судя из твоего письма, не "\(ddd)+", а
SD> 'yuDw4Pfg5eLuLdfl8Orl8fHo/y4'.
SD> Вот что у меня получается:
SD> sergei at dolmatov test/ruby/convert $ cat test.rb
SD> #!/usr/bin/env ruby
SD> def win2koi(str)
SD> str.tr('АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя', 'бвчздецъйклмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС');
SD> end;
SD> puts win2koi('yuDw4Pfg5eLuLdfl8Orl8fHo/y4'.unpack("m")[0])
SD> sergei at dolmatov test/ruby/convert $ ruby test.rb
SD> Карачаево-Черкесси
SD> sergei at dolmatov test/ruby/convert $
SD> Куда делась последняя "я", я не знаю.
SD> Почему это не может работать под Windows - тоже не знаю.
SD> Если надо перевести строку из koi в win, то просто поменяй местами строчки
SD> в win2koi.
Не в этом дело... Я верю, что твоя строчка работает. Но у меня
'yuDw4Pfg5eLuLdfl8Orl8fHo/y4'.unpack("m")[0] дает те самые
"\(ddd)+". А как из числового значения получить символ? Допустим я
хочу получить символ с кодом 200
--
Best regards,
SoNaR mailto:sonar at scli.ru
More information about the Ruby
mailing list