C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перекодирование из KOI-8 v Windows-1251  (Прочитано 6902 раз)
Demodand
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 55


Перекодирование из KOI-8 v Windows-1251
« : 31 Июль 2008, 11:40:47 »

Подскажите пожалуйста, есть ли в С++ Builder встроенные функции перекодировки символов из KOI-8  v Windows-1251. Если, да то как она называется, если нет, то возможно, у кого нибудь есть уже написанная функция перекодировки, на вход которой скажем подается кодировка  KOI-8, а на выходе она же, но уже в Windows-1251. 
Записан
Yurkins
Участник


Сказали спасибо: +36/-3
Offline

Сообщений: 368


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #1 : 31 Июль 2008, 15:03:26 »

Перевод из Delphi:
Код
//---------------------------------------------------------------------------
AnsiString WinToKoi(const AnsiString St)
{
 char Win_KoiChars[] = {
      128,129,130,131,132,133,134,135,136,137,060,139,140,141,142,143,
      144,145,146,147,148,169,150,151,152,153,154,062,176,157,183,159,
      160,246,247,074,164,231,166,167,179,169,180,060,172,173,174,183,
      156,177,073,105,199,181,182,158,163,191,164,062,106,189,190,167,
      225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
      242,243,244,245,230,232,227,254,251,253,154,249,248,252,224,241,
      193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
      210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209};
 AnsiString Result=St;
 for (int i = 1; i St.Length(); i++)
 {
  if (int(St[i]) > 127)
    Result[i] = Win_KoiChars[St[i]];
 }
 return Result;
}
 
//---------------------------------------------------------------------------
AnsiString KoiToWin(const AnsiString St)
{
 char Koi_WinChars[] = {
      128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
      144,145,146,147,148,149,150,151,152,153,218,155,176,157,183,159,
      160,161,162,184,186,165,166,191,168,169,170,171,172,173,174,175,
      156,177,178,168,170,181,182,175,184,185,186,187,188,189,190,185,
      254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
      239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
      222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
      207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218};
 AnsiString Result = St;
 for (int i = 1; i St.Length(); i++)
 {
  if (int(St[i]) > 127)
    Result[i] = Koi_WinChars[St[i]];
 }
 return Result;
}
Записан
avtor-ht
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 18


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #2 : 21 Август 2008, 12:32:56 »

Подскажите пожалуйста подробнее как это использовать?
Тоесть мне надо перекодировать текст из win в koi.
Как использовать эти таблицы для этого?
Записан
VerZer
Участник


Сказали спасибо: +92/-10
Offline

Сообщений: 1138


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #3 : 21 Август 2008, 12:39:51 »

примерно так:
Код:
AnsiString win, koi;
win = "текст для перекодирования";
koi = WinToKoi(win);
Записан
avtor-ht
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 18


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #4 : 21 Август 2008, 13:21:02 »

rr = Win_Koi("текст про сиськи");

неработает.. билдер ругается .. типа неизвесная функция.
вот ето я добавил в код:
AnsiString WinToKoi(const AnsiString St)
{
  char Win_KoiChars[] = {
       128,129,130,131,132,133,134,135,136,137,060,139,140,141,142,143,
       144,145,146,147,148,169,150,151,152,153,154,062,176,157,183,159,
       160,246,247,074,164,231,166,167,179,169,180,060,172,173,174,183,
       156,177,073,105,199,181,182,158,163,191,164,062,106,189,190,167,
       225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
       242,243,244,245,230,232,227,254,251,253,154,249,248,252,224,241,
       193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
       210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209};
  AnsiString Result=St;
  for (int i = 1; i   {
   if (int(St) > 127)
     Result
= Win_KoiChars[St];
  }
  return Result;
}
я тут хочу уточнить.. я немного непойму.. это же у вас не функция.. это вы как бы объявляете переменную..
Записан
oxotnik
Глобальный модератор


Сказали спасибо: +100/-15
Offline

Сообщений: 2425


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #5 : 21 Август 2008, 14:15:09 »

rr = Win_Koi("текст про сиськи"); => rr = WinToKoi("текст про сиськи");
Записан
avtor-ht
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 18


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #6 : 03 Сентябрь 2008, 07:32:21 »

Неработает(
Пишет [BCC32 Error] Unit2.cpp(26): E2268 Call to undefined function 'WinToKoi'
Как правильно объявить эту функцию? А если это не функция то как правильно использовать это?!)
Записан
olegenty
Администратор


Сказали спасибо: +16/-7
Offline

Сообщений: 520


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #7 : 03 Сентябрь 2008, 08:32:55 »

функция должна быть объявлена ВЫШЕ места её использования. вынеси обе функции в отдельный модуль и включай его (#include) куда требуется.
Записан
avtor-ht
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 18


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #8 : 03 Сентябрь 2008, 09:05:46 »

Помогли решить проблему. в cpp объявляется вот так:

AnsiString TForm2::KoiToWin(const AnsiString St)

и потом объявляется в ашнике

AnsiString KoiToWin(const AnsiString St)

спасибо тут разобрался.. однако главную проблему это решить не помогло(((
Может кто нибудь занимался IdSMTP1. И решал проблемы с кодировкой? Уже неделю инет рою и ни одного вразумительного ответа((
Записан
J_PC
новенький


Сказали спасибо: +0/-0
Offline

Сообщений: 1


Re: Перекодирование из KOI-8 v Windows-1251
« Ответ #9 : 12 Ноябрь 2011, 13:28:42 »

Блин, скопировал не глядя...
Что же за три года никто не написал, что оно в билдёре так работать не будет.
Должно быть так:
Код
AnsiString WinToKoi(const AnsiString St)
{
 char Win_KoiChars[] = {
      128,129,130,131,132,133,134,135,136,137,060,139,140,141,142,143,
      144,145,146,147,148,169,150,151,152,153,154,062,176,157,183,159,
      160,246,247,074,164,231,166,167,179,169,180,060,172,173,174,183,
      156,177,073,105,199,181,182,158,163,191,164,062,106,189,190,167,
      225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
      242,243,244,245,230,232,227,254,251,253,154,249,248,252,224,241,
      193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
      210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209};
 AnsiString Result=St;
 for (int i = 1; i St.Length(); i++)
 {
if ((unsigned char)(St[i]) > 128)
    Result[i] = Win_KoiChars[(unsigned char)St[i] - 128];
 }
 return Result;
}
 
//---------------------------------------------------------------------------
AnsiString KoiToWin(const AnsiString St)
{
 unsigned char Koi_WinChars[] = {
      128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
      144,145,146,147,148,149,150,151,152,153,218,155,176,157,183,159,
      160,161,162,184,186,165,166,191,168,169,170,171,172,173,174,175,
      156,177,178,168,170,181,182,175,184,185,186,187,188,189,190,185,
      254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
      239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
      222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
      207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218};
 AnsiString Result = St;
 for (int i = 1; i St.Length(); i++)
 {
  if ((unsigned char)(St[i]) > 128)
    Result[i] = Koi_WinChars[(unsigned char)St[i] - 128];
 }
 return Result;
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.189 секунд. Запросов: 20.