[Ruby] base64

Sergei Dolmatov sergei at dolmatov.dsb.ru
Thu May 8 11:12:25 MSD 2003


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, но я могу ошибаться.

Не знаю, как это выглядит под Windows, и что Windows почитает за Unicode,
но, по-моему, это нифига не уникод, по крайней мере, под Linux у меня. И
входная строка, судя из твоего письма, не "\(ddd)+", а
'yuDw4Pfg5eLuLdfl8Orl8fHo/y4'.

Вот что у меня получается:

sergei at dolmatov test/ruby/convert $ cat test.rb
#!/usr/bin/env ruby

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

puts win2koi('yuDw4Pfg5eLuLdfl8Orl8fHo/y4'.unpack("m")[0])
sergei at dolmatov test/ruby/convert $ ruby test.rb
Карачаево-Черкесси
sergei at dolmatov test/ruby/convert $

Куда делась последняя "я", я не знаю.

Почему это не может работать под Windows - тоже не знаю.

Если надо перевести строку из koi в win, то просто поменяй местами строчки
в win2koi.

--
Regards,
Sergei Dolmatov.
---
UNIX enhancements aren't.



More information about the Ruby mailing list