Показано с 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 => [208, 130], 129 => [208, 131], 130 => [226, 128, 154],
        
    131 => [209, 147], 132 => [226, 128, 158], 133 => [226, 128, 166],
        
    134 => [226, 128, 160], 135 => [226, 128, 161], 136 => [226, 130, 172],
        
    137 => [226, 128, 176], 138 => [208, 137], 139 => [226, 128, 185],
        
    140 => [208, 138], 141 => [208, 140], 142 => [208, 139], 143 => [208, 143],
        
    144 => [209, 146], 145 => [226, 128, 152], 146 => [226, 128, 153],
        
    147 => [226, 128, 156], 148 => [226, 128, 157], 149 => [226, 128, 162],
        
    150 => [226, 128, 147], 151 => [226, 128, 148], 152 => [194, 152],
        
    153 => [226, 132, 162], 154 => [209, 153], 155 => [226, 128, 186],
        
    156 => [209, 154], 157 => [209, 156], 158 => [209, 155], 159 => [209, 159],
        
    160 => [194, 160], 161 => [208, 142], 162 => [209, 158], 163 => [208, 136],
        
    164 => [194, 164], 165 => [210, 144], 166 => [194, 166], 167 => [194, 167],
        
    168 => [208, 129], 169 => [194, 169], 170 => [208, 132], 171 => [194, 171],
        
    172 => [194, 172], 173 => [194, 173], 174 => [194, 174], 175 => [208, 135],
        
    176 => [194, 176], 177 => [194, 177], 178 => [208, 134], 179 => [209, 150],
        
    180 => [210, 145], 181 => [194, 181], 182 => [194, 182], 183 => [194, 183],
        
    184 => [209, 145], 185 => [226, 132, 150], 186 => [209, 148],
        
    187 => [194, 187], 188 => [209, 152], 189 => [208, 133], 190 => [209, 149],
        
    191 => [209, 151], 192 => [208, 144], 193 => [208, 145], 194 => [208, 146],
        
    195 => [208, 147], 196 => [208, 148], 197 => [208, 149], 198 => [208, 150],
        
    199 => [208, 151], 200 => [208, 152], 201 => [208, 153], 202 => [208, 154],
        
    203 => [208, 155], 204 => [208, 156], 205 => [208, 157], 206 => [208, 158],
        
    207 => [208, 159], 208 => [208, 160], 209 => [208, 161], 210 => [208, 162],
        
    211 => [208, 163], 212 => [208, 164], 213 => [208, 165], 214 => [208, 166],
        
    215 => [208, 167], 216 => [208, 168], 217 => [208, 169], 218 => [208, 170],
        
    219 => [208, 171], 220 => [208, 172], 221 => [208, 173], 222 => [208, 174],
        
    223 => [208, 175], 224 => [208, 176], 225 => [208, 177], 226 => [208, 178],
        
    227 => [208, 179], 228 => [208, 180], 229 => [208, 181], 230 => [208, 182],
        
    231 => [208, 183], 232 => [208, 184], 233 => [208, 185], 234 => [208, 186],
        
    235 => [208, 187], 236 => [208, 188], 237 => [208, 189], 238 => [208, 190],
        
    239 => [208, 191], 240 => [209, 128], 241 => [209, 129], 242 => [209, 130],
        
    243 => [209, 131], 244 => [209, 132], 245 => [209, 133], 246 => [209, 134],
        
    247 => [209, 135], 248 => [209, 136], 249 => [209, 137], 250 => [209, 138],
        
    251 => [209, 139], 252 => [209, 140], 253 => [209, 141], 254 => [209, 142],
        
    255 => [209, 143]
      }
      
    #--------------------------------------------------------------------------
      
    def win1251_to_utf8(win1251)
        
    utf8 = ""
        
    i = 0
        
    while i < win1251.length
          char 
    = win1251[i, 1][0]
          if 
    char < 128
            utf8 
    += char.chr
          
    else
            
    TABLE[char].each {|c| utf8 += c.chr}
          
    end
          i 
    += 1
        end
        
    return utf8
      end
      
    #--------------------------------------------------------------------------
      
    module_function :win1251_to_utf8
    end 
    Последний раз редактировалось Inca; 05.06.2013 в 15:19.

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

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

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

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

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

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Module: Windows-1251 -&gt; UTF8 conversion