Хорошо! Хорошо!:  0
Плохо! Плохо!:  0
Показано с 1 по 6 из 6

Тема: Module: Windows-1251 -> UTF8 conversion

  1. #1
    Пользователь Аватар для insider
    Информация о пользователе
    Регистрация
    24.04.2008
    Сообщений
    86
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию Module: Windows-1251 -> UTF8 conversion

    Это не готовый скрипт какой-нибудь фенечки, а функция, призванная решить проблемы чтения текста в Windows-1251 кодировке. Посему не_скриптеры могут дальше не читать.

    Скриптерам же поясню:
    Обычно (в 90% случаев) русские символы во всяких текстовых файлах хранятся в кодировке Windows-1251, нам это удобно и мы к этому привыкли.
    И вот с помощью IO.read мы решили прочитать какой-нибудь текст и вывести его на экран, но получили "квадраты" вместо текста.
    Почему? Потому что Ruby не воспринимает русский текст ни в чем другом, кроме как в UTF8.

    Чтобы нормально прочитать файл с русскими символами с помощью данной функции, надо поступить так:
    PHP код:
    Util::win1251_to_utf8(IO.read
    Ну и сам код функции:
    PHP код:
    #==============================================================================
    #  every string written by insider; icq: 577070
    #==============================================================================
    module Util
      
    #--------------------------------------------------------------------------
      
    TABLE =
      {
        
    128 => [208130], 129 => [208131], 130 => [226128154],
        
    131 => [209147], 132 => [226128158], 133 => [226128166],
        
    134 => [226128160], 135 => [226128161], 136 => [226130172],
        
    137 => [226128176], 138 => [208137], 139 => [226128185],
        
    140 => [208138], 141 => [208140], 142 => [208139], 143 => [208143],
        
    144 => [209146], 145 => [226128152], 146 => [226128153],
        
    147 => [226128156], 148 => [226128157], 149 => [226128162],
        
    150 => [226128147], 151 => [226128148], 152 => [194152],
        
    153 => [226132162], 154 => [209153], 155 => [226128186],
        
    156 => [209154], 157 => [209156], 158 => [209155], 159 => [209159],
        
    160 => [194160], 161 => [208142], 162 => [209158], 163 => [208136],
        
    164 => [194164], 165 => [210144], 166 => [194166], 167 => [194167],
        
    168 => [208129], 169 => [194169], 170 => [208132], 171 => [194171],
        
    172 => [194172], 173 => [194173], 174 => [194174], 175 => [208135],
        
    176 => [194176], 177 => [194177], 178 => [208134], 179 => [209150],
        
    180 => [210145], 181 => [194181], 182 => [194182], 183 => [194183],
        
    184 => [209145], 185 => [226132150], 186 => [209148],
        
    187 => [194187], 188 => [209152], 189 => [208133], 190 => [209149],
        
    191 => [209151], 192 => [208144], 193 => [208145], 194 => [208146],
        
    195 => [208147], 196 => [208148], 197 => [208149], 198 => [208150],
        
    199 => [208151], 200 => [208152], 201 => [208153], 202 => [208154],
        
    203 => [208155], 204 => [208156], 205 => [208157], 206 => [208158],
        
    207 => [208159], 208 => [208160], 209 => [208161], 210 => [208162],
        
    211 => [208163], 212 => [208164], 213 => [208165], 214 => [208166],
        
    215 => [208167], 216 => [208168], 217 => [208169], 218 => [208170],
        
    219 => [208171], 220 => [208172], 221 => [208173], 222 => [208174],
        
    223 => [208175], 224 => [208176], 225 => [208177], 226 => [208178],
        
    227 => [208179], 228 => [208180], 229 => [208181], 230 => [208182],
        
    231 => [208183], 232 => [208184], 233 => [208185], 234 => [208186],
        
    235 => [208187], 236 => [208188], 237 => [208189], 238 => [208190],
        
    239 => [208191], 240 => [209128], 241 => [209129], 242 => [209130],
        
    243 => [209131], 244 => [209132], 245 => [209133], 246 => [209134],
        
    247 => [209135], 248 => [209136], 249 => [209137], 250 => [209138],
        
    251 => [209139], 252 => [209140], 253 => [209141], 254 => [209142],
        
    255 => [209143]
      }
      
    #--------------------------------------------------------------------------
      
    def win1251_to_utf8(win1251)
        
    utf8 ""
        
    0
        
    while win1251.length
          char 
    win1251[i1][0]
          if 
    char 128
            utf8 
    += char.chr
          
    else
            
    TABLE[char].each {|cutf8 += c.chr}
          
    end
          i 
    += 1
        end
        
    return utf8
      end
      
    #--------------------------------------------------------------------------
      
    module_function :win1251_to_utf8
    end 
    Последний раз редактировалось Inca; 05.06.2013 в 16:19.

  2. #2

    По умолчанию

    Ты его тестил?...

  3. #3
    Пользователь Аватар для insider
    Информация о пользователе
    Регистрация
    24.04.2008
    Сообщений
    86
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Исправил ошибку падения скрипта, если в тексте встречалось что-нибудь, кроме русских букв.
    Последний раз редактировалось insider; 20.06.2009 в 07:20.

  4. #4

    По умолчанию

    "Ты его тестил?..."
    1.
    char = win1251[i, 1].ord
    Видимо, нужно заменить на
    Код:
    char = win1251[i, 1][0]
    или еще на что-нибудь, ибо .ord это твой стримовский метод, которого нет у строк.

    ---
    Второй вопрос снят. Все работает, спасибо!
    Последний раз редактировалось Equilibrium Keeper; 20.06.2009 в 14:23.

  5. #5
    Пользователь Аватар для insider
    Информация о пользователе
    Регистрация
    24.04.2008
    Сообщений
    86
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Отредактил первый пост

  6. #6
    Пользователь Аватар для KARAKURT
    Информация о пользователе
    Регистрация
    11.05.2008
    Сообщений
    74
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Хоть я не скриптер, но понимаю вещь очень полезная.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •