myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 

abra
Отправлено: 9.9.2009, 19:57


Абсолютный новичок


Группа: Пользователи
Сообщений: 2
Регистрация: 9.9.2009
Пользователь №: 4 403


Цитата(Alexey @ 9.9.2009, 19:05) *
По логике, нужно смотреть на ту строку, ошибку в которой пишет птока. Так-же, по логике, нужно приводить полный код скрипта, а не проверенный рабочий кусок чужого кода. Ну и втретьих, опять-же, по логике, вышепреведённый кусок кода от Сетапера с дописанными ниже парой строк работает.
Код
DD = AnsiToUtf8('рыба')
Core.SendToAll(DD)

Что подтверждается выводом в общий чат хаба следующей ерунды: [19:14:52] рыба


Спасибо за ответ.

В общем, перекодировка мне нужна не для целей вывода в чат сообщения. Мне это нужно для одной цели: взять текст, перекодировать из УТФ в АНСИ и отправить по почте. Почему именно так - есть система класса Сервис Деск, при поступлении заявки в систему пользователю уходит письмо. Все это было на инглыше. Но появилась необходимость отправлять письма и на русском. Так вот, начинка системы написана на ЛУА. Скрипт коннектится к БД, вытягивает значения (они в УТФ), формирует и отправляет письмо. Но сабджект письма в Анси (он статичный, не из БД), и при получении письба в сабджекте - знаки вопроса.

По этому вот такой и вопрос - как сделать вышеизложенный код рабочим? Я в луа не разбираюсь, но знаком с другими скриптовыми языками типа Перла, подход везде один и тот же, но в данном случае в логах - ошибка. И скорее из-за тго, что в языке, как сказал, не разбираюсь.
Помогите, плз, нет времени (пока) его учить.
  Форум: Программирование на Lua · Просмотр сообщения: #20635 · Ответов: 1049 · Просмотров: 938 509

abra
Отправлено: 9.9.2009, 16:52


Абсолютный новичок


Группа: Пользователи
Сообщений: 2
Регистрация: 9.9.2009
Пользователь №: 4 403


Добрый день!
Не понимаю в lua практически ничего, но по логике, когда пытаюсь сделать:
DD = AnsiToUtf8('рыба')
то получаю следующую ошибку: attempt to index local 's' (a string value)

Скажите, плз, каким образом я могу переконвертировать строку из одной кодировки в другую, а результат сохранить в переменной?

Спасибо!!


Раскрывающийся текст
Цитата(Setuper @ 6.9.2008, 16:58) *
Привожу полное преобразование на lua из кодировки cp1251 (Ansi) в utf-8 и обратно, с помощью функций AnsiToUtf8 и Utf8ToAnsi соответственно:

Код
local ansi_decode={
  [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]='\209\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'
}
local utf8_decode={
  [128]={[147]='\150',[148]='\151',[152]='\145',[153]='\146',[154]='\130',[156]='\147',[157]='\148',[158]='\132',[160]='\134',[161]='\135',[162]='\149',[166]='\133',[176]='\137',[185]='\139',[186]='\155'},
  [130]={[172]='\136'},
  [132]={[150]='\185',[162]='\153'},
  [194]={[152]='\152',[160]='\160',[164]='\164',[166]='\166',[167]='\167',[169]='\169',[171]='\171',[172]='\172',[173]='\173',[174]='\174',[176]='\176',[177]='\177',[181]='\181',[182]='\182',[183]='\183',[187]='\187'},
  [208]={[129]='\168',[130]='\128',[131]='\129',[132]='\170',[133]='\189',[134]='\178',[135]='\175',[136]='\163',[137]='\138',[138]='\140',[139]='\142',[140]='\141',[143]='\143',[144]='\192',[145]='\193',[146]='\194',[147]='\195',[148]='\196',
    [149]='\197',[150]='\198',[151]='\199',[152]='\200',[153]='\201',[154]='\202',[155]='\203',[156]='\204',[157]='\205',[158]='\206',[159]='\207',[160]='\208',[161]='\209',[162]='\210',[163]='\211',[164]='\212',[165]='\213',[166]='\214',
    [167]='\215',[168]='\216',[169]='\217',[170]='\218',[171]='\219',[172]='\220',[173]='\221',[174]='\222',[175]='\223',[176]='\224',[177]='\225',[178]='\226',[179]='\227',[180]='\228',[181]='\229',[182]='\230',[183]='\231',[184]='\232',
    [185]='\233',[186]='\234',[187]='\235',[188]='\236',[189]='\237',[190]='\238',[191]='\239'},
  [209]={[128]='\240',[129]='\241',[130]='\242',[131]='\243',[132]='\244',[133]='\245',[134]='\246',[135]='\247',[136]='\248',[137]='\249',[138]='\250',[139]='\251',[140]='\252',[141]='\253',[142]='\254',[143]='\255',[144]='\161',[145]='\184',
    [146]='\144',[147]='\131',[148]='\186',[149]='\190',[150]='\179',[151]='\191',[152]='\188',[153]='\154',[154]='\156',[155]='\158',[156]='\157',[158]='\162',[159]='\159'},[210]={[144]='\165',[145]='\180'}
}

local nmdc = {
  [36] = '$',
  [124] = '|'
}

function AnsiToUtf8(s)
  local r, b = ''
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      r = r..string.char(b)
    else
      if b > 239 then
        r = r..'\209'..string.char(b - 112)
      elseif b > 191 then
        r = r..'\208'..string.char(b - 48)
      elseif ansi_decode[b] then
        r = r..ansi_decode[b]
      else
        r = r..'_'
      end
    end
  end
  return r
end

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ''
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r..'_'
    end
  end
  return r
end

:)
  Форум: Программирование на Lua · Просмотр сообщения: #20620 · Ответов: 1049 · Просмотров: 938 509


New Posts  Открытая тема (есть новые ответы)
No New Posts  Открытая тема (нет новых ответов)
Hot topic  Горячая тема (есть новые ответы)
No new  Горячая тема (нет новых ответов)
Poll  Опрос (есть новые голоса)
No new votes  Опрос (нет новых голосов)
Closed  Закрытая тема
Moved  Тема перемещена
 

RSS Сейчас: 27.4.2024, 20:45