![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
китайские символы
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 имеет тип Текстовый, и там поиск выполняется по всему полю.