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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Спасибо! но стоит ли заморачиваться?? 01.12.03 21:23  Число просмотров: 2501
Автор: dron <Ivanov Andrey> Статус: Member
<"чистая" ссылка>
Мож оставить все как есть, пускай себе валяются в 1251, в браузере они же выдаются в нормальном виде, или можно наткнуться на какие-нить грабли??? Просто уже надоело писать -), сначала на asp теперь вот на php, хочется уже прикрутить и забыть, хотя бы на время!
<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