Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

китайские символы


Страницы:   1 2 3

ankazh ©   (2012-10-01 02:14:00) 

s := TmemoryStream.Create;
RichEdit1.lines.SaveToStream(s);
s.position:=0;
(fmDM.DSourceSlovar.DataSet.FieldByName('PrimerCl') as TBlobField).LoadFromStream(s);
s.free;

в базу вписывются китайские символы...что делать?


ankazh   (2012-10-05 00:39:00) [1]


> icWasya

не поленилась и ввела снова код, который вводила сама и который мне вы снова предложили. Ввела "света вася коля" и получила "⃠￱" (вместо 3-ого кубика какой-то перечеркнутый кружек). Затем ввожу еще...покучаю реально какие-то китайско-японские закарлючки.


icWasya   (2012-10-01 17:57:00) [2]

Ну если такую строку
S:AnsiString;
S:='retwertre'#13#10'ftyu'#13#10'uiys%';
записать в поток, а потом прочитать как unicodestring, то получится каша, как у автора


stas   (2012-10-01 15:23:00) [3]

Тогда не понятно откуда автор получил китайские буквы :)


sniknik   (2012-10-01 15:23:00) [4]

кстати формат rtf не использует символы > #127. так, для справки.


sniknik   (2012-10-01 15:19:00) [5]

я говорил. нужно "обманывать" иначе не выйдет.


stas   (2012-10-01 15:17:00) [6]

Попробовал )
AdoQuery1.Edit;
s := TmemoryStream.Create;
Memo1.lines.SaveToStream(s);
s.position:=0;
(AdoQuery1.FieldByName('Pole1') as TBlobField).LoadFromStream(s);
s.free;
AdoQuery1.Post;


Access показал правильные буквы ) на русском. Хм...


sniknik   (2012-10-01 15:14:00) [7]

> то при чтении будут вопросы
access показывает серию квадратиков, видимо у него \x4\x1D\x4\x18\x4\x1C\x4\x10\x4\x1D\x4\x18\x4это символ ошибки преобразования. но суть та же\x1D\x4\x18\x4\x1C\x4\x10\x4\x1D\x4\x18\x4\x15\x4.


sniknik   (2012-10-01 15:03:00) [8]

> как раз и получается такой глюк)
не получается, пока во всяком случае у тебя не получилось... нужно лучше стараться...
не было тут такого кода чтобы получилось описанное, а если получится (постарайся) то при чтении будут вопросы, говорил уже.


stas   (2012-10-01 15:00:00) [9]

sniknik ©   (01.10.12 14:45) [50]
правильно с потоком как раз и получается такой глюк)


sniknik   (2012-10-01 14:47:00) [10]

> то откуда акцесс узнает
ему не нужно, он работает только с юникодом... хранить иногда (приводил справку) может в ansi но работает - получает/отдает юникод.


sniknik   (2012-10-01 14:45:00) [11]

stas ©
если уж хочешь "глюка", который пытаешься показать, то должен "обмануть" дельфю, например подкинуть ей через не типизированные указатели тип widestring под видом string. чтобы он реально считал 1 символ за 2.


stas   (2012-10-01 14:45:00) [12]

sniknik ©   (01.10.12 14:33) [47]
Это оффтоп конечно...

Все равно не пойму как так может быть. Не берем rtf, просто текст.

Записываем в поток 2 байта  в десятичном представлении это 255 и 255. в дельфи если это загрузить в тип стринг,  то будет 2 символа с кодом 255. Потом этот поток грузим в поле memo.

Tсли посмотреть в акцесс, то откуда акцесс узнает что надо показать 2 символа с кодом 255 и 255, а не один 65535 ?


ankazh   (2012-10-01 14:38:00) [13]

спасибо за ответы, оч конкретно и понятно. Теперь буду знать где рыть. :)


sniknik   (2012-10-01 14:33:00) [14]

stas ©   (01.10.12 13:06) [40]
> Мы наверное не о том говорим.
без разницы, запишет все ок, в "правильном юникоде", другое дело не текст, а в представлении rtf. но это опять не от ADO зависит.


stas   (2012-10-01 14:31:00) [15]

http://office.microsoft.com/ru-ru/access-help/HP001032253.aspx
и почитайте это


stas   (2012-10-01 14:23:00) [16]

ankazh ©   (01.10.12 13:43) [44]
не понял? типа надо искать только в начале слова а не в внутри слова?

ну тогда надо уже думать например
h1:=fmMain.Edit1.Text+'%';
h2:=QuotedStr(h1);
h3:=QuotedStr('% '+h1)
'SELECT * from Slovar where Transkript like'+h2 or Transkript Like'+h3

т.е. мы ищем либо впервом слове либо за пробелом.
Ну а там скобки бробелы и т.д. короче надо определить что такое слово, а оптом уже строить логику.
При этом надо не забывать что это все влияет на скорость и возможно для более оптимального поиска построить структуру хранения данных таким образом чтобы избежать снижения производительности.


ankazh   (2012-10-01 13:43:00) [17]


> stas ©   (01.10.12 13:28) [42]
> чтобы не первое надо % с двух сторон.
>
>

сделала по твоему и сработало, но как быть, если мне нужно чтоб слово начиналось, а не содержало Edit1.Text?


ankazh   (2012-10-01 13:30:00) [18]

% с двух сторон, значит какие-то символы спереди и какие-то сзади от введенного слова


stas   (2012-10-01 13:28:00) [19]

чтобы не первое надо % с двух сторон.


ankazh   (2012-10-01 13:23:00) [20]

procedure TfmMain.Edit1Change(Sender: TObject);
var h1, h2:string ;
begin
h1:=fmMain.Edit1.Text+'%';
h2:=QuotedStr(h1);

with fmDM.ADOQuerySlovar do
begin
  DisableControls;
  Close;
  SQL.Clear;
      if RadioButton1.Checked then SQL.Add('SELECT * from Slovar where Transkript like'+h2) else
      if RadioButton2.Checked then SQL.Add('SELECT * from Slovar where RusWord like'+h2)
  Open;
  EnableControls;
end;

при таком запросе находит ТОЛЬКО первое слово в "поле МЕМО" (RusWord). Правильно ли написан обработчик поиска или может я что-либо упустила? В БД все слова отобрж корректно. Поле Transkript имеет тип Текстовый, и там поиск выполняется по всему полю.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо