информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / web building
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
а как?? 03.12.03 11:35  Число просмотров: 2540
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
А иде ему енто указать можно?
<web building>
кодировки БД 26.11.03 23:53  
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
Есть большая база данных (4 гига) некоторые таблицы по 10 млн записей, крутится под mssql на 4-м пне 1,3 гигагерца, написал оболочку на asp, пока база была маленькая вспе было нормуль, как только разлослаьс до нынешних размеров выдает odbc еррор типа реквест таймаут хоть убейся, всвязи с этим перенес все под mysql на линухе (2 пень 300 мегагерц) - запрос выполняется не намного дольше, зато никаких там таймаутов, оболочку переписал на php, но возникла проблемка: в mysql я заливал все из тестового файла, который предварительно экпортнул из mssql, а там кодировка 1251. Вот я и думаю ничего если данные так и будут в этой кодировке лежать, или все же лучше в кои-8 конвертнуть и как енто сделать??? Просто неудобно утилиткой линуховской данные просматривать...
[Delphi] Вот тебе конвертор... 27.11.03 12:31  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 27.11.03 12:59  Количество правок: 1
<"чистая" ссылка>
Subj.

Кодирует Win1251 в КОИ8. По ссылке PE32 файл, поэтому запускать под виндой ;-)

Хочешь, сам разберись, ниже код...
Язык паскаль, компилер Delphi...
Таблицы перекодировки взяты из легендарного Far Manager'а.

Буферизация 64k, лопатит тексты только шуба заворачиватеся, лишь бы винт успевал ;-)
Размер файлов неважен, может быть больше 4 гигов.

Удачи.

program Win1251toKOI8r;
{$APPTYPE CONSOLE}
uses  Windows;

Type
  TByteArray = Array[0..$FF] Of Byte;

CONST

  KOI8_R_MAP: TByteArray = (
     $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F,
     $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F,
     $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F,
     $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,
     $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F,
     $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F,
     $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F,
     $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F,
     $C4,$B3,$DA,$BF,$C0,$D9,$C3,$B4,$C2,$C1,$C5,$DF,$DC,$DB,$DD,$DE,
     $B0,$B1,$B2,$F4,$FE,$F9,$FB,$F7,$F3,$F2,$FF,$F5,$F8,$FD,$FA,$F6,
     $CD,$BA,$D5,$F1,$D6,$C9,$B8,$B7,$BB,$D4,$D3,$C8,$BE,$BD,$BC,$C6,
     $C7,$CC,$B5,$F0,$B6,$B9,$D1,$D2,$CB,$CF,$D0,$CA,$D8,$D7,$CE,$FC,
     $EE,$A0,$A1,$E6,$A4,$A5,$E4,$A3,$E5,$A8,$A9,$AA,$AB,$AC,$AD,$AE,
     $AF,$EF,$E0,$E1,$E2,$E3,$A6,$A2,$EC,$EB,$A7,$E8,$ED,$E9,$E7,$EA,
     $9E,$80,$81,$96,$84,$85,$94,$83,$95,$88,$89,$8A,$8B,$8C,$8D,$8E,
     $8F,$9F,$90,$91,$92,$93,$86,$82,$9C,$9B,$87,$98,$9D,$99,$97,$9A
   );

  Windows_1251_MAP: TByteArray = (
    $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F,
    $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F,
    $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F,
    $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,
    $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F,
    $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F,
    $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F,
    $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F,
    $3F,$3F,$27,$3F,$22,$3A,$C5,$D8,$3F,$25,$3F,$3C,$3F,$3F,$3F,$3F,
    $3F,$27,$27,$22,$22,$07,$2D,$2D,$3F,$54,$3F,$3E,$3F,$3F,$3F,$3F,
    $FF,$F6,$F7,$3F,$FD,$3F,$B3,$15,$F0,$63,$F2,$3C,$BF,$2D,$52,$F4,
    $F8,$2B,$49,$69,$3F,$E7,$14,$FA,$F1,$FC,$F3,$3E,$3F,$3F,$3F,$F5,
    $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F,
    $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F,
    $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF,
    $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF
  );

Type
  TWorkBuffer = Packed Array[1..1024*64] Of Byte; //64k buffering -veryfast!!!

Var
  J: Integer;
  NewMap: TByteArray;
  rFile, wFile: THandle;
  inBuff, outBuff: TWorkBuffer;
  BytesReaded, BytesWritten: DWORD;

begin

  If ParamCount < 2 Then
  Begin
    WriteLn('Insufficent command line parameters. Expected: in_file_name, out_file_name');
    Exit;
  End;

  For J := 0 To $FF Do
    NewMap[J] := J; //Init convert map

  For J := 0 To $FF Do
    NewMap[KOI8_R_MAP[J]] := J; //Fill convert map

  rFile := CreateFile(PChar(ParamStr(1)), GENERIC_READ, FILE_SHARE_READ, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  If rFile = INVALID_HANDLE_VALUE Then
  Begin
    WriteLn('Error opening input file');
    Exit;
  End;
  Try
    wFile := CreateFile(PChar(ParamStr(2)), GENERIC_WRITE, 0, Nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    If wFile = INVALID_HANDLE_VALUE Then
    Begin
      WriteLn('Error opening output file');
      Exit;
    End;
    Try
      BytesReaded := 0; BytesWritten := 0;
      Repeat
        If Not ReadFile(rFile, inBuff, SizeOf(inBuff), BytesReaded, Nil) Then
        Begin
          WriteLn('Error reading input file');
          Exit;
        End;

        For J := 1 To BytesReaded Do //Real conversion goes here
          outBuff[J] := NewMap[Windows_1251_MAP[inBuff[J]]];

        If Not WriteFile(wFile, outBuff, BytesReaded, BytesWritten, Nil) Then
        Begin
          WriteLn('Error writing output file');
          Exit;
        End;
      Until SizeOf(inBuff) <> BytesReaded;
    Finally
      CloseHandle(wFile);
    End;
  Finally
    CloseHandle(rFile);
  End;
end.

---


Бинарник можно взять здесь:
Конвертор -- хорошо, но... 27.11.03 12:46  
Автор: LLL <Алексей> Статус: Member
<"чистая" ссылка>
как я понял вопрос, надо конвертить базу, а не текст. Тем не менее, если mysql позволяет сделать экспорт-импорт базы через текст, то утилитка вполне может помочь.
Под юниксом для перекодирования текстов сам давно пользуюсь простеньким шелл-скриптом, который когда-то сваял один знакомый. Скрипт содержит таблицы, передаваемые tr'у, который собственно конвертацию и делает. Насчет производительности tr'а ничего сказать не могу, зато скрипт платформенно-независимый.
А я конверчу trans-ом 27.11.03 16:59  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Из латехового пакета (tetex-latex.bla-bla-bla.rpm) там тоже tr используется, но понимает штук 5 кодировок и конвертит из любой в любую. Производительность хорошая. Потому как тормоза могут идти только от шелла, но непосредственно конвертация производится уже в бинарном tr - очень неплохо справляющимся со своими обязанностями.
Спасибо! но стоит ли заморачиваться?? 01.12.03 21:23  
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
Мож оставить все как есть, пускай себе валяются в 1251, в браузере они же выдаются в нормальном виде, или можно наткнуться на какие-нить грабли??? Просто уже надоело писать -), сначала на asp теперь вот на php, хочется уже прикрутить и забыть, хотя бы на время!
Тогда надо mysql сказать, что данные в 1251 лежат... чтоб... 02.12.03 13:51  
Автор: archy Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Мож оставить все как есть, пускай себе валяются в 1251, в
> браузере они же выдаются в нормальном виде, или можно
> наткнуться на какие-нить грабли??? Просто уже надоело
> писать -), сначала на asp теперь вот на php, хочется уже
> прикрутить и забыть, хотя бы на время!
Тогда надо mysql сказать, что данные в 1251 лежат... чтоб сортировки всякие были и все такое...
а как?? 03.12.03 11:35  
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
А иде ему енто указать можно?
Пусть возьмёт таблицы из FAR'a и напишет собственную процедуру (для MySQL или Perl или для чего ему надо), я думаю в моём примере всё понятно. Да и WEB рулит, я думаю есть куча примеров готовых скриптов. 27.11.03 12:56  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach