Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дайте ф-ции перевода KOI8-R, RTF --> ANSI 
:(
    Опции темы
Alexeyt
  Дата 16.8.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 15.9.2006
Где: около Москвы

Репутация: нет
Всего: 2



1 Ищется ф-ция (или таблица символов, array[0..255] of char)
для перевода KOI8-R --> ANSI.

2 Ищется способ без использования VCL перевести RTF --> ANSI.
Без создания временного RichEdit: прога консольная, поэтому цеплять RE не 
хочется...


Это сообщение отредактировал(а) Alexeyt - 16.8.2007, 20:41
PM WWW   Вверх
Matematik
Дата 16.8.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 7
Всего: 50



1) UCodeTables.pas получено из таблицы перекодировки для апача (apache.lexa.ru)

Код

// kod1 - из
// kod2 - в
procedure conve234(kod1,kod2:Integer;var s:AnsiString);
var j:Integer;
begin
  if (kod1 in [1..4]) and (kod2 in [1..4]) then
    for j:=1 to length(s) do
      s[j] := Char(UCodeTables.CodeTables[kod1, kod2][Byte(s[j])]);
end;


2) поищи тут http://www.google.com/codesearch типа rtf2txt

Это сообщение отредактировал(а) Matematik - 16.8.2007, 20:54

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  UCodeTables.pas 19,68 Kb
PM MAIL WWW ICQ   Вверх
jonie
Дата 21.8.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



можно воспользоваться системой) Думаю из C переведете в Delphi без проблем, все функции из WinAPI
Код

// Константы для кодовых страниц
#define CP_KOI8       20866
#define CP_KOI8R      20866
#define CP_KOI8U      21866
#define CP_ISO_8859_5 28595

// Исключительно для удобства
#define CP_1251       1251

// Инлайновые обертки для сокращения кода

// Самая нужная из них
inline BOOL ConvertCP(UINT uiIN, UINT uiOUT, CString& szString){
  BOOL bRet = ConvertCP(uiIN, uiOUT, szString.GetBuffer(szString.GetLength()+1));
  szString.ReleaseBuffer();
  return bRet;
}

// Аналогичные можно определить по вкусу, смотря какое
// преобразованеи используется чаще
inline BOOL ConvertToKOI8(UINT uiIN, LPSTR lpString){
  return(ConvertCP(uiIN, CP_KOI8R, lpString));
}

inline BOOL ConvertFromKOI8(UINT uiOUI, LPSTR lpString){
  return(ConvertCP(CP_KOI8R, uiOUI, lpString));
}


inline BOOL ConvertToKOI8(UINT uiIN, CString& szString){
  return(ConvertCP(uiIN, CP_KOI8R, szString));
}

inline BOOL ConvertFromKOI8(UINT uiOUI, CString& szString){
  return(ConvertCP(CP_KOI8R, uiOUI, szString));
}

// Преобразование кодировки "на месте"
BOOL ConvertCP(UINT uiIN, UINT uiOUT, LPSTR lpString){
  if(!lpString) return FALSE; // Получили NULL - нехорошо, ошибочка
  if(!lpString[0]) return TRUE; // Пустая строка - OK, преобразования не надо

  // Сперва определяем необходимый размер промежуточного буфера
  int nRet = MultiByteToWideChar(uiIN, MB_PRECOMPOSED, lpString, -1, NULL, 0);
  if(nRet == 0) return FALSE;

  // Создаем его
  WCHAR* pwcBuffer = new WCHAR[nRet+2];

  // Преобразование uiIN -> Юникод
  nRet = MultiByteToWideChar(uiIN, MB_PRECOMPOSED, lpString, -1, pwcBuffer, nRet+2);
  if(nRet ==

    delete[] pwcBuffer;
    return FALSE;
  }

  // Преобразование Юникод -> uiOUT.
  // Неизвестные символы заменяем "#". Кому такое поведение не нравится, может
  // "поиграть" с параметрами WideCharToMultiByte()
  nRet = WideCharToMultiByte(uiOUT, 0, pwcBuffer, -1, lpString, strlen(lpString)+1, "#", NULL);
  // Освобождаем память
  delete[] pwcBuffer;

  if(nRet == 0) return FALSE;

  return TRUE;
}



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alexeyt
Дата 22.8.2007, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 15.9.2006
Где: около Москвы

Репутация: нет
Всего: 2



Спасибо.
PM WWW   Вверх
sentry
Дата 22.8.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Code Monkey
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 29.1.2007
Где: Москва

Репутация: нет
Всего: 10



Alexeyt, если все сделал, то пометь вопрос решенным. А если нет, то предложу еще один вариант.

1) пишем в Word строку символов, нуждающихся в перекодировке (естественно, первые 128 символов не пишем);
2) сохраняем это как только текст в кодировке Windows;
3) сохраняем это же в других файлах, назначая другие кодировки;
4) открываем файл с кодировкой, отличной от Windows, но при открытии указываем, что хотим читать его как некодированный текст;
5) копируем получившуюся строку.

Вот урезанный пример:
Код

const
  WIN: string = 'абв';
  KOIR: string = 'БВЧ';
  // ...
function Convert(const S, Lang1, Lang2: string): string;
var
  I, P: Integer;
begin
  Result := S;
  for I := 1 to Length(S) do
  begin
    P := Pos(S[I], Lang1);
    if P > 0 then
      Result[I] := Lang2[P];
  end; 
end;  
  //...
S := Convert(S, WIN, KOIR);

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0526 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.