powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
60 сообщений из 60, показаны все 3 страниц
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772562
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть бд на firebird3. Программа записывает данные из файла или из memo в blob и обратно- читает из blob в мемо. В бд есть 2 блоб поля: blob_Binary(subtype=0) и Blob_Text(subtype=1,utf-8). Кодировка везде Utf-8.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TfMain.bInBlobClick(Sender: TObject);
 var
  ms : TMemoryStream;
begin
      ms := TMemoryStream.Create;
  try
      memo2.lines.savetostream(ms, TEncoding.UTF8);             
      ms.position := 0;
  
     Query1.Edit;
     TBlobField(Query1.FieldByName('BLOB_TEXT')).LoadFromStream(ms);
     Query1.Post;
  finally
     ms.free;
  end;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TfMain.bRead2Click(Sender: TObject);
var
 ms : TMemoryStream;
begin
     ms := TMemoryStream.Create;
  try
     TBlobField(Query1.FieldByName('BLOB_TEXT')).SaveToStream(ms);
     ms.position := 0;
     memo2.lines.loadfromstream(ms);
  finally
     ms.free;
  end;


end;

Когда ввожу текст в мемо на англииском, русском и грузинских языках, вместо грузинских букв в блобах сохраняются кракозябры и иэроглифы (см скрин), хотя при чтении блобы нормально читаются и в обоих мемо отображаются исходные тексты.
И иногда, без всяких закономерностей, при чтении текстового блоба выводит такую ошибку:
авторEEncodingError 'No mapping for the unicode character exists in the target multi-byte code page'
Что делаю неправильно при сохранении данных в блобах, чтобы текстовый блоб был читабельным и как избегать эту ошибку?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772563
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кодировка бд и таблицы utf-8
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772564
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
такие иероглифы сохраняются в обоих блобах, но при чтений в мемо правильно отображается исходный текст.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772565
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так сохраняется текстовый файл в обоих блобах. Текст файла видно в мемо1 и мемо2, внизу.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772584
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubu,

Версию Delphi озвучьте и какие компоненты доступа используете.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772622
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В самом приложении, в настройках подключения к базе, надеюсь, кодировку UTF8 указываешь?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772637
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuЧто делаю неправильно при сохранении данных в блобах, чтобы текстовый блоб был читабельным и как избегать эту ошибку?
если напрямую в IBE редактировать тексты блобов, кракозябров нет?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772730
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.02.2019 3:35, bastibubu пишет:
> Есть бд на firebird3. Программа записывает данные из файла или из memo в blob и обратно- читает из blob в мемо.

какие компоненты доступа?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772807
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11В самом приложении, в настройках подключения к базе, надеюсь, кодировку UTF8 указываешь?
Да, конечно. (см скрин)

Мимопроходящийкакие компоненты доступа?
FireDac. fdQuery
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772809
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772810
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.02.2019 13:48, bastibubu пишет:
> FireDac. fdQuery

тряси Арефьева.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772818
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Докесли напрямую в IBE редактировать тексты блобов, кракозябров нет?
в текстовом нормально читается, в бинарном-нет (см. скрин)

goldmi45 Версию Delphi озвучьте и какие компоненты доступа используете.

Delphi 10.2.3, компоненты FireDac (fdQuery)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772907
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийтряси Арефьева
я бы и Хвастунову еще написал. У него тоже встречаются "неюникодные" таблички
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772925
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuX11В самом приложении, в настройках подключения к базе, надеюсь, кодировку UTF8 указываешь?
Да, конечно. (см скрин)Попробуй указать в настройках соединения FireDac (и только там) UTF-16

Кроме того, к полю текстового блоба можно обращаться через AsString
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772945
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Попробуй указать в настройках соединения FireDac (и только там) UTF-16
_Vasilisk_ , нет в комбо такой кодировки

_Vasilisk_к полю текстового блоба можно обращаться через AsString
При записи или чтении? Напишите, пожалуйста, что вы имеете в виду
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772953
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuнет в комбо такой кодировкиUNICODE_LE

bastibubu_Vasilisk_к полю текстового блоба можно обращаться через AsStringПри записи или чтении? Напишите, пожалуйста, что вы имеете в видуВместо
bastibubu
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TfMain.bInBlobClick(Sender: TObject);
 var
  ms : TMemoryStream;
begin
      ms := TMemoryStream.Create;
  try
      memo2.lines.savetostream(ms, TEncoding.UTF8);             
      ms.position := 0;
  
     Query1.Edit;
     TBlobField(Query1.FieldByName('BLOB_TEXT')).LoadFromStream(ms);
     Query1.Post;
  finally
     ms.free;
  end;
end;




Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TfMain.bRead2Click(Sender: TObject);
var
 ms : TMemoryStream;
begin
     ms := TMemoryStream.Create;
  try
     TBlobField(Query1.FieldByName('BLOB_TEXT')).SaveToStream(ms);
     ms.position := 0;
     memo2.lines.loadfromstream(ms);
  finally
     ms.free;
  end;
end;

писать
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TfMain.bInBlobClick(Sender: TObject);
begin
  Query1.Edit;
  Query1.FieldByName('BLOB_TEXT').AsString := memo2.Lines.Text;
  Query1.Post;
end;

procedure TfMain.bRead2Click(Sender: TObject);
begin
  memo2.Lines.Text := Query1.FieldByName('BLOB_TEXT').AsString;
end;
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39772976
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuв текстовом нормально читается, в бинарном-нет (см. скрин)
потому что средствами IBE в бинарный блоб текст записывается как ANSI, а в текстовый блоб как UTF8
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773015
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_ , работает в случае Blob_Text( и хранит и выводит правильно) а вот в случае бинарного- хранит как иероглифы(ANSI?) хотя выводит нормально. :)

Код записи в blob_binary:
Код: pascal
1.
2.
3.
Query1.Edit;
(Query1.FieldByName('BLOB_BINARY') as TBlobField).LoadFromFile(OpenDialog1.FileName);
Query1.Post;
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773044
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, перепутал с кодом. Это код записи в blob_binary из внешнего текстового файла:
Код: pascal
1.
2.
3.
Query1.Edit;
(Query1.FieldByName('BLOB_BINARY') as TBlobField).LoadFromFile(OpenDialog1.FileName);
Query1.Post;


в blob_binary получаю иероглифы
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773047
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, не в бинарном блобе а в blob_text получаю иероглифы. Сильно запутался. :)

Код: pascal
1.
2.
3.
Query1.Edit;
(Query1.FieldByName('BLOB_TEXT') as TBlobField).LoadFromFile(OpenDialog1.FileName);
Query1.Post;
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773108
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
https://en.wikipedia.org/wiki/Mojibake#Caucasian_languages
хотя ничем знание причины не помогает поскольку все уже пробовал и перепроверял. Ж(
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773376
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuв blob_binary получаю иероглифы blob_binary не предназначен для хранения текста. Он предназначен для хранения бинарных данных. Т.е. какие байты туда записали, те же байты и прочитали. Вне зависимости от настроек кодировок
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773413
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_bastibubuв blob_binary получаю иероглифы blob_binary не предназначен для хранения текста. Он предназначен для хранения бинарных данных. Т.е. какие байты туда записали, те же байты и прочитали. Вне зависимости от настроек кодировок
_Vasilisk_ , это я понимаю. Дело в том, что когда я тестировал ваше предложение, оказалось что текстовый файл был в кодировке utf-BOM. В этом случае файл в memo был нормально прочитан но как поменял utf-BOM на utf уже выводил иероглифы Ansi. А мне нужно, наоборот, файл создать в utf поскольку везде кодировка utf (и в бд и в таблице, и в FireDac Connection Definition).
И что главное- как быть с китайскими иероглифами в blob_text?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773450
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Файл бинарный? Используйте BLOB BINARY и Load/SaveStream

Файл текстовый? Используйте BLOB TEXT и AsString.

Ничего другого мудрить не нужно.

Что не получится из этих рекомендаций - спрашивайте
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773491
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuИ что главное- как быть с китайскими иероглифами в blob_text?
"Ох, уж эти сказки ...." ©


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









Я же говорю, стучись к Хвастунову. У него грид кракозябры, вероятнее всего, отображает
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773495
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокУ него грид кракозябры, вероятнее всего, отображаетА как должен? hex-коды? Это бинарный блоб. А если ты туда exe файл засунешь, что он должен отобразить?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773545
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док,
Тоже самое у меня если достучаться до бд из IBExpert. Здесь все правильно. (см. скрин)
Проблема при доступе через Delphi :
1) бинарный блоб
==================
Если файл в кодировке utf и сохраняю прямо в бд, то в бинарном блобе текст отображается так что если выводить в мемо, текст нечитабельный.
А если файл в кодировке utf_BOM тогда в бинарном блобе правильно сохраняется(как ansi иероглифы) и следовательно и в мемо нормально отображается.

2) текстовый блоб
==================
не имеет значения кодировка utf или utf-BOM в текстовом блобе в обоих случаях сохраняются китайские иероглифы.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ID:=Query1.FieldByName('Content_id').asInteger;
  OpenDialog1.Execute;
  QueryUpd.Close;
  QueryUpd.SQL.Text := 'SELECT * FROM content where Content_id=:id';
  QueryUpd.Params[0].AsInteger:=ID;
  QueryUpd.open;

  QueryUpd.Edit;
  (QueryUpd.FieldByName('BLOB_BINARY') as TBlobField).LoadFromFile(OpenDialog1.FileName);
  QueryUpd.Post;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ID:=Query1.FieldByName('Content_id').asInteger;
  OpenDialog1.Execute;
  QueryUpd.Close;
  QueryUpd.SQL.Text := 'SELECT * FROM content where Content_id=:id';
  QueryUpd.Params[0].AsInteger:=ID;
  QueryUpd.open;

  QueryUpd.Edit;
  (QueryUpd.FieldByName('BLOB_TEXT') as TBlobField).LoadFromFile(OpenDialog1.FileName);
  QueryUpd.Post;



https://onedrive.live.com/?id=29624722F45C06E9!102428&cid=29624722F45C06E9
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773614
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если текстовый файл закодирован как "unicode"(noteped) или ucs-2 LE BOM (noteped++) тогда исчезают китаиские иероглифы и файл правильно сохраняется в текстовый блоб. Аналогично, в случае бинарного блоба если файл в utf-BOM.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773628
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Это бинарный блоб. А если ты туда exe файл засунешь, что он должен отобразить?
То, что ты туда засунул. Тебя не смущает, что символы первых 127 символов ASCII (совпадающие с юникодом) отображаются корректно?

bastibubuЕсли файл в кодировке utf и сохраняю прямо в бд, то в бинарном блобе текст отображается так что если выводить в мемо, текст нечитабельный.
А ты уверен, что твой мемо корректно читает UTF8 без BOM? ЕМНИП, в дельфях есть функции, которые позволяют "угадать" кодировку текста (в Лазаре они есть)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773641
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокА ты уверен, что твой мемо корректно читает UTF8 без BOM?
Док, спорить с тобой не могу, не исклучаю что так и есть.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773644
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя вряд ли. Тот же самый результат когда файл открываю в RichEdit.
Utf8-BOM, Unicode, Unicode Big Endians правильно отображаются.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773645
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то же самое в случае Jedi(jvMemo).
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773894
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuХотя вряд ли.
Да неужели? :)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm1.FormCreate(Sender: TObject);
begin
  IBDatabase1.Connected:= True;
  IBTransaction1.Active:= True;
  IBQuery1.Active:= True;

  RichMemo1.Text:= TBlobField(IBQuery1.FieldByName('BLOB_BIN')).AsString;
  Memo1.Text:= TBlobField(IBQuery1.FieldByName('BLOB_BIN')).AsString;

  RichMemo2.Lines.LoadFromFile(AppendPathDelim(ExtractFilePath(Application.ExeName)) + 'utf8_without_bom.txt', True);
  Memo2.Text:= TBlobField(IBQuery1.FieldByName('BLOB_TXT')).AsString;
end; 



Не думаю, что в дельфях поведение сильно отличается от Лазаря
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773958
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док, A как блоб-данные у вас оказались в бд? Через IBExpert? Если да так и у меня все в порядке. Проблема когда компонентами Delphi .
Смотрите. В бюджетном Noteped-е есть кодировки:
utf-8, Unicode, Unicode big endian,
а в Noteped++: utf8, utf8-BOM, ucs2 BE BOM, ucs 2 LE BOM.

Создавал файлы в noteped и когда смотрю encoding в Nooteped++ там видно что для созданного в noteped utf файла noteped++ показывает кодировку utf-BOM. Есть и другие соответствия такого вида:

noteped noteped++utf8 utf8-BOMUnicode ucs-2 LE BOMUnicode big endian ucs-2 BE BOMнет соответствия utf8
Я создавал файл в notepad++ как utf8. А это как раз есть utf8 без BOM. А utf8 без BOM в hex не имеет маркера как ascii и трудно отличить их друг от друга.
Вчера создал 3 файла в noteped: utf8, Unicode, Unicode big endianб сохранял в блобе и в "Firebird Maestro Professional" наблюдал как выглядят в hex(см. скрин).
Где то здесь скрывается причина. Может быть Delphi считает файл без BOM как Ansi и поэтому теряется текст кроме английского.
Сейчас файлы храню как unicode notepad или ucs-2 LE BOM noteped++ и правильно сохраняются в обоих блобах.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773966
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док , вы можете создать файл в кодировке utf-8 не в простом noteped-а а в noteped++ и сохранить в блобах. Интересно что скажет Lazarus.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39773993
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubu,

могу, но это будет после 20.00 Мск, когда я домой приду.

Все utf8-ные файлы я создавал в Notepad ++, данные в БД грузил скриптом в IBE. В приведенном выше посте для чтения данных пользовал IBX для лазаруса.

Но, думается, содержимое бинарного блоба не зависит от того, чем в него пишешь. Для чистоты эксперимента надо запускать этот тест на дельфях. Ладно, руки дойдут, попробую.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39774166
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, все оказалось, как и подозревал. У Лазаря в редакторе кодовая страница под умолчанию UTF8, у дельфей - win1251. Как только применил перекодировку из юникода в анси, все встало на свои места

код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
procedure TForm2.btnReadClick(Sender: TObject);
begin
  if TBlobField(DSet.FN('BLOB_BIN')).IsNull
    then
      begin
        Memo1.Text:= 'Город Гунган пусто-пусто...';
        RichEdit1.Text:= 'Город Гунган пусто-пусто...'
      end
    else
      begin
        Memo1.Text:= Utf8ToAnsi(TBlobField(DSet.FN('BLOB_BIN')).AsString);
        RichEdit1.Text:= Utf8ToAnsi(TBlobField(DSet.FN('BLOB_BIN')).AsString);
      end;

  if TBlobField(DSet.FN('BLOB_TXT')).IsNull
    then
      begin
        Memo2.Text:= 'Город Гунган пусто-пусто...';
        RichEdit2.Text:= 'Город Гунган пусто-пусто...'
      end
    else
      begin
        Memo2.Text:= {Utf8ToAnsi}(TBlobField(DSet.FN('BLOB_TXT')).AsString);
        RichEdit2.Text:= {Utf8ToAnsi}(TBlobField(DSet.FN('BLOB_TXT')).AsString);
      end;
end;

картинка


зы. вставку не пробовал, времени нет. Если будет интересно, проект со скриптами базы прилагаю, можешь чуть доработать напильником (из доп.компонентов EhLib и FIBPlus)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39774188
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док , большое спасибо вам! Буду еще тестировать. :)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39774200
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuБуду еще тестировать. :)
имей ввиду, что при вставке, возможно , надо будет применять обратную перекодировку AnsiToUtf8, чтобы компоненты доступа "правильно" писали данные в базу. Хотя в мануалах к FB пишется, что данные "перекодируются на лету". :)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39774201
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докнадо будет применять обратную перекодировку AnsiToUtf8
я имел ввиду бинарный блоб, текстовый блоб имеет явное указание на кодировку, потому с ним проблем нет.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39774648
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док_Vasilisk_Это бинарный блоб. А если ты туда exe файл засунешь, что он должен отобразить?То, что ты туда засунул. Тебя не смущает, что символы первых 127 символов ASCII (совпадающие с юникодом) отображаются корректно?Нет. Мне вообще достаточно надписи (BLOB) и вкладки AsHex.

Что там смотреть? Это бинарные нечитаемые данные. Точка.
bastibubu1) бинарный блоб
==================
Если файл в кодировке utf и сохраняю прямо в бд, то в бинарном блобе текст отображается так что если выводить в мемо, текст нечитабельный.Вот же ж вы настырный. Какое слово из этого

_Vasilisk_Файл бинарный? Используйте BLOB BINARY и Load/SaveStream

Файл текстовый? Используйте BLOB TEXT и AsString.вам не понятно? Или хочецца?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39774730
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Файл бинарный? Используйте BLOB BINARY и Load/SaveStream

Файл текстовый? Используйте BLOB TEXT и AsString.
_Vasilisk_ , почему вы думаете что и так не делаю? Но не работает.

Настырность не при чём. По моему, вы не поняли проблему: Если файл сохраняю в кодировке utf8(то есть without BOM) в noteped++ и открываю в мемо текст нечитабельный а если сохраняю в кодировке utf8-BOM, ucs-2 BE BOM, ucs-2 LE BOM) тогда никакие китайские иероглифы не выводит.

Код: pascal
1.
2.
3.
4.
5.
procedure TfMain.bTextfileToMemoClick(Sender: TObject);
begin
OpenDialog1.execute;
memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;



Создайте файл в noteped++ как в кодировке utf8 (без BOM), запишите там 'Hello Привет ' или что-нибудь и открывайте в мемо. Думаю получите тот же результат.
P.S. Простой noteped не подойдет. Там нет utf8 without BOM. Там есть только utf8-BOM.
P.P.S. Unicode (noteped)=ucs-2 BE BOM(Noteped++) работают как часы- правильно загружает текст в обоих блобах, и в мемо, и из мемо в блобах и из блобы в мемо/richedit.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39774736
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Что там смотреть? Это бинарные нечитаемые данные. Точка.
да расслабься уже, выходные жеж :)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39775362
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bastibubuСоздайте файл в noteped++ как в кодировке utf8 (без BOM), запишите там 'Hello Привет ' или что-нибудь и открывайте в мемо. Думаю получите тот же результат.
Все правильно. Без BOM как мемо, по-твоему, должен догадаться, что ему скармливают именно utf8?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39775508
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Все правильно. Без BOM как мемо, по-твоему, должен догадаться, что ему скармливают именно utf8?

Это как раз не трудно. У UTF-8 жесткая структура, так что просто попробовать текст как UTF-8, а если не получится (т.е. если текст не является UTF-8) - пробовать уже другие кодировки.

Вот UTF-16 от MBCS - уже отличать можно только эвристикой-статистикой, но пока примитивной.
А разные MBCS друг от друга - так и вообще....

Забавно, что в целом ему это уже объясняли.

https://stackoverflow.com/questions/54659936/how-to-write-txt-file-in-blob
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39775512
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for the record
Stack Overflow

I get a Google Drive permissions error when I try to follow your link. Anyway, do you get the same result with text saved to a Char field?


@MartynA, thank you for you answer. I create char(1000) field with utf encoding and then write text from memo in this field. Code is: ms : TMemoryStream; begin ms := TMemoryStream.Create; try memo1.lines.savetostream(ms, TEncoding.UTF8); ms.position := 0; Query1.Edit; Query1.FieldByName('CHAR1').AsString :=memo1.Lines.Text; Query1.Post; As a result: Text with georgian characters is saved succesfully.


"DB has utf-encoding." that is not how Firebird works. Each column of a character type has its own character set, the default character set only specifies the character set to apply when a column is created without a character set clause, and the default character set doesn't apply retroactively. The problem could be that the column has the wrong character set (or none). The problem could also be indicative of using character set NONE as the connection character set instead of explicitly connecting with a connection character set (UTF8 would probably be the best choice given the data)


Note that blobs are even more problematic especially when using text data in binary blobs and then trying to show them as text. I don't do Delphi myself, but I seem to recall Delphi uses UTF-16 by default, which may introduce another chance for conversion errors.


@MarkRotteveel, everywhere and everytime I use only utf encoding. Connection character set also is utf. Text blob field is created with utf. I delete it and recreate but nothing changes. I add Project and db files in my post above.


@MartynA, I edit my onedrive cloud permission. Now you are able download project and db files.

Not knowing Delphi, I can't really help you further, but to me a TFileStream suggests it reads binary, not text. Are you sure that is the proper course of action here?



I do not have Delphi 10.x nor do I have any older AnyDAC/FireDAC library with me, however.... program MyInfoRepository1; uses Vcl.Forms, uMain in 'D:\MyInfoRepository\uMain.pas' {fMain}; - there are two problems with your ZIP: 1) you do not put your main form sources into it, and 2) the very fact that DPR lists absolute file name instead of relative means that your form sources lie outside of your main project file. Sometimes it is intended, but in your case you clearly is dizzy about Delphi programs structure. So, I am ATM skeptical about ur claim Connection character set also is utf.


Perhaps you can put the texts of your forms - both .pas source texrt and .dfm source text - onto some service like Pastebin.com, or github.com


@MarkRotteveel TFileStream is a stream that reads files. How it's interpreted, as raw bytes or as text or whatever else, is an unrelated concern.


@basti also if you can work with TMemoryStream then perhaps you look for TBlobSteam or TField.CreateBlobStream or something of that kind, that your database-connecting library provides.


@Arioch'The, I update my onedrive folder. I simplify project and when I save with new name(save project as...) I forgotten create forms in it. :) As for being skeptical about my claim that Connection character set is utf. I update post and add image. please see.


did you try other firebird connection libraries? dbExpress, Unified Interbase, Interbase Express? Will they work differently w.r.t blob ?


Notepad's UNICODE is WindowsNT Unicode, which used to be UCS-2 in older NT versions and which is UTF16 now ( no a "core" subset USC-2 and UTF16 are the same). So your rightmost screenshot shows almost the same text file data, just with or without BOM


Query1.Params[0].AsStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead); - what happens here is TWO operations. 1) you create a binary (not-text) stream out of text file. 2) you push this binary (not-text) stream into blob. When you read files by Default Delphi uses "platform-specific" charset, which for Windows and Delphi2009+ is "WideChar" = UTF16. Then you push the charset-less non-text data into the blob parameter, so no conversion is possible. // try to think along TFile.ReadAllText(const Path: string; const Encoding: TEncoding) and maybe TFile.OpenText


your param type should be text blob, that is ftMemo - check these and compare wit hyour SELECT columns: docwiki.embarcadero.com/Libraries/Seattle/en/… docwiki.embarcadero.com/Libraries/Seattle/en/… docwiki.embarcadero.com/Libraries/Seattle/en/Data.DB.TMemoFi‌​eld also check value and description of TMemoField.Transliterate


So, as of now, I can see two obvious ways to put the text file into the blob field. First one makes double conversion UTF-8 -> UTF-16(UCS2) -> UTF-8. But doing so it implicitly makes data sanity checking on client. Second one would try to just push the data into the database bypassing checks. If you would try to do it with the malformed (non-UTF-8) file - results would differ. Also, Delphi's TEncoding class is weird beast, try to use TEncoding.UTF8 = TUTF8Encoding.Create object to convert non-UTF-8 (malformed) data to string,AFAIR it would return empty string instead of raising Exception


Also, in general I think a special explicit UPDATE OR INSERT SQL statement with using parameters is more safe and debugging-friendly than using implicit SELECT with Query1.Edit, YMMV. Then you can {TMemoField/TParam} . {AsString/AsWideString} := TFile.ReadAllText('myUTF8text.txt', TEncoding.UTF8); for double-conversion and {TMemoField/TParam} . AsBytes := TFile.ReadAllBytes('myUTF8text.txt'); bypassing checks (in particular, if future database versions would change the collation of the blob-text column the direct bypassing insertion maybe would not detect it, not sure).

As of Delphi XE2 though there is a bug in TFile that prevents it reading read-only files (like ones on CD-ROM media, or r/o ACL grants, or r/o file attribute), as even TFile.ReadXXXX methods try to open file for read-write access instead, like default Pascal reset procedure did. I outlined the potential future problems I can see, so check them proactively


@Arioch'The thank you for you attempt to help me. I will carefully read you comments. Today I realise some aspects: When I create txt-file in noteped++ in utf encoding it is utf without BOM. utf in noteped and utf in noteped++ arent the same. utf in noteped is equivalent to utf wirh BOM in noteped++. You may create file in noteped as utf and then open in noteped++ and see encoding in menu.


When I create txt-file in noteped++ not in simple utf encoding but in ucs-2 BE BOM or ucs-2 LE BOM they are saved in blobs correctly(both are 16-bite utfs). Maybe it is because it's difficult for delphi distinguish utf without BOM from Ansi. Both are without markers. You may see image from hex, I put it on onedrive, in my project folder. onedrive.live.com/…


utf encoding - no such thing. There is UTF-7, UTf-8, UTF-16. UTF-32 and maybe more. They are different. Then, UTF-8 (and perhaps UTF-7) are independent on "byte order" (google "big endian" or "intel/Motorola endian") while those >8 UTFs are dependent in proper bytestream aggregation, so they usually use BOM (byte-order marker), to make parser learn byte order of the generator, however it is not required, but a good habit to put it when passing texts across architectures, still a habit not requirement. UTF <= 8 don't need BOM, while it is allowed. BOM is just "invisible letter", one of.


UTF-nn is still UTF-nn with or without BOM. It is just a special letter. Text encoding does not change if you add or remove some letter. UCS2 (old Windows Unicode) is subset of UTF-16 (today Windows Unicode). Every UCS2 text is UTF-16, just like every ASCII7 text is UTF-8. Delphi's WideString is by definition Windows Unicode (it is COM B_STR datatype), UnicodeString is not B_STR but is Windows Unicode too. C# and Java strings are UTF-16. So, when you loose charset information and do plain bytes transfer - UTF-16 interpretation is what you probably would receive, by default.


BOM letter then MIGHT trigger reconsideration, if some Delphi library would do a fool-proofness check. But that is not granted. To be on safe side you should keep strings (texts) as strings and never switch to bytes, then you might blame libraries if they screw charset information. Alternatively, you can bypass libraries and work with bytes directly, then it would be your responsibility to track and check all the charsets through all the chain and to transcode where needed. When you did ftBlob and LoadFromFile you talked in bytes-not-letters terms. When you use select and db-aware grid


you talk in letters-not-bytes terms. In between there can be mismatches. Now, your database have it as text blob, the letters-not-bytes principle, then the mismatch is (least library bugs) when you pushing the data into the database, on the update or insert statement part for example. And in that step you have to decide you either would work with letter or with bytes, you either would delegate charset tracking and transcoding to libraries or do it yourself and preclude libraries. And those approaches I outlined above in .AsWideString := ... and .AsBytes := ... snippets


UTF-16 interpretation is what you probably would receive, by default - in Delphi 2009+, I mean. Delphi 2007 and prior, and libraries written back then, would rather default to 8-bits MBCS ("ANSI") interpretation of the very same binary data, if you convert bytes to text.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39775605
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Без BOM как мемо, по-твоему, должен догадаться, что ему скармливают именно utf8?
а что, в дельфях разве нет функции для "автоэнкодинга"?

В лазаре аж три перегруженные функции LoadFromFile (я привел одну из них выше). Наверняка в Дельфях есть то же самое (увы, последняя версия, где я что-то наваял, была XE)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39775773
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокВ лазаре аж три перегруженные функции LoadFromFile (я привел одну из них выше). Наверняка в Дельфях есть то же самое (увы, последняя версия, где я что-то наваял, была XE)
Именно "авто"? Нету. И в FPC, насколько я вижу по сорцам, тоже нету. Просто там UTF-8 - родная для string, вот она и подставляется дефолтом. А попробуй выставить какой-то там дефайн для отключения UTF-8 в качестве родной, и все, приплыли.
AriochЭто как раз не трудно. У UTF-8 жесткая структура, так что просто попробовать текст как UTF-8, а если не получится (т.е. если текст не является UTF-8) - пробовать уже другие кодировки.
Эм, ну ок
Код: sql
1.
Это как раз не трудно

- корректный UTF-8. И что с ним дальше делать?
Можно определить некоторые случаи, когда текст НЕ в UTF-8. Но это лишь подмножество из возможного количества вариантов
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39775974
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Именно "авто"? Нету. И в FPC, насколько я вижу по сорцам, тоже нету. Просто там UTF-8 - родная для string, вот она и подставляется дефолтом. А попробуй выставить какой-то там дефайн для отключения UTF-8 в качестве родной, и все, приплыли.
Ты прав. Волшебной функции нету, но есть модуль LConvEncoding с волшебной функцией GuessEncoding :) На скорую руку набросал:
код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
function TForm1.GetFileEncoding(var AFileName: String): TEncoding;
var
  tf: TextFile;
  SL: TStringList;
  buff: String[200];
  cnt: Integer;
begin
  Result:= TEncoding.Default;

  try
    AssignFile(tf,AFileName);
    Reset(tf);
    cnt:= 0;

    SL:= TStringList.Create;
    try
      while (not EOF(tf)) and (cnt < 1) do
      begin
        ReadLn(tf,buff);
        if UTF8Length(UTF8Trim(buff)) > 0 then
        begin
          SL.Add(buff) ;
          Inc(cnt);
        end;
      end;

      if cnt = 0 then Exit;

      case GuessEncoding(SL.Strings[0]) of
        EncodingAnsi,
        EncodingCP1250,
        EncodingCP1251,
        EncodingCP1252,
        EncodingCP1253,
        EncodingCP1254,
        EncodingCP1255,
        EncodingCP1256,
        EncodingCP1257,
        EncodingCP1258
                       : Result:= TEncoding.ANSI;
        EncodingUCS2LE : Result:= TEncoding.Unicode;
        EncodingUCS2BE : Result:= TEncoding.BigEndianUnicode;
       EncodingUTF8BOM,
          EncodingUTF8
                       : Result:= TEncoding.UTF8;
        else
          Result:= TEncoding.Default;
      end;

    finally
      FreeAndNil(SL);
    end;
  finally
    CloseFile(tf);
  end;
end;     

procedure TForm1.LoadText(Sender: TObject);
var
  ansi_txt,
  utf8_txt,
  utf8_bom,
  ucs2_be_bom,
  ucs2_le_bom: String;

begin
  ansi_txt:= AppendPathDelim(ExtractFilePath(Application.ExeName)) + 'sometext_cp1251.txt';
  utf8_txt:= AppendPathDelim(ExtractFilePath(Application.ExeName)) + 'sometext_utf8.txt';
  utf8_bom:= AppendPathDelim(ExtractFilePath(Application.ExeName)) + 'sometext_utf8_bom.txt';
  ucs2_be_bom:= AppendPathDelim(ExtractFilePath(Application.ExeName)) + 'sometext_ucs2_be_bom_BE.txt';
  ucs2_le_bom:= AppendPathDelim(ExtractFilePath(Application.ExeName)) + 'sometext_ucs2_le_bom_BE.txt';

  Memo1.Lines.LoadFromFile(ansi_txt,GetFileEncoding(ansi_txt));
  Memo2.Lines.LoadFromFile(utf8_txt,GetFileEncoding(utf8_txt));
  Memo3.Lines.LoadFromFile(utf8_bom,GetFileEncoding(utf8_bom));
  Memo4.Lines.LoadFromFile(ucs2_be_bom,GetFileEncoding(ucs2_be_bom));
  Memo5.Lines.LoadFromFile(ucs2_le_bom,GetFileEncoding(ucs2_le_bom));
end;

картинко
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776025
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
справедливости ради замечу, что на fpc 3.0.4 не взлетит (LoadFromFile/LoadFromStream еще не имеют перегруженных аналогов), только хардкор транк :)
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776048
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокВолшебной функции нету, но есть модуль LConvEncoding с волшебной функцией GuessEncoding :)
А ты посмотри ее код xD какая там магия, тупо проверка БОМ-ов, прогон по <#128, преобразование utf8, а в финале - ТА-ДАММ - Result:=GetDefaultTextEncoding; // use system encoding
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776051
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2финале - ТА-ДАММ - Result:=GetDefaultTextEncoding; // use system encoding
"Так тебе шашечки или ехать?" ©

Ты об чем споришь сейчас? Или приведенный мною способ проблемы ТС не решает?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776058
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему ТС решает LoadFromFile('...', TEncoding.UTF8), ну или чуть более универсально - try u8s := Utf8String(Buffer) except {это явно не UTF8} end (лень проверять, выкинет ли неявный каст эксепшен, идея, надеюсь, понятна).
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776083
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Проблему ТС решает LoadFromFile('...', TEncoding.UTF8)
Возможно. Кодировки для меня - явление новое, с учётом специфики лазаря ещё могут быть ещё и отличия от дельфей. Будет время, поэкспериментирую для личного опыта.
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776222
bastibubu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док Волшебной функции нету, но есть модуль LConvEncoding с волшебной функцией GuessEncoding :)


Док, есть ещё GetBufferEncoding:This example determines the encoding of a source file and then writes the file in any encoding chosen. http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/TEncoding_(Delphi)

Василий 2Проблему ТС решает LoadFromFile('...', TEncoding.UTF8), ну или чуть более универсально - try u8s := Utf8String(Buffer) except {это явно не UTF8} end
Василий 2, пробовал и такую перегруженную процедуру LoadFromFile('...', TEncoding.UTF8), но это недостаточно, с этим или без него результат один, а Utf8String(Buffer) пока не использовал.
Главное что причину прояснил и сейчас файл сохраняю как BOM (utf8, unicode, unicode big endian) и проблема снята- китайские иероглифы исчезли и в бинарном блобе текст правильно сохраняется из rtf-файла/memo/richedit и загружается обратно. На этом этапе мне и это достаточно.

Если кому-то интересно очень помогли эти статьи:
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Unicode_in_RAD_Studio#Summary_of_What_Has_Not_Changed
http://docwiki.embarcadero.com/RADStudio/Berlin/en/UTF-8_Conversion_Routines
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776245
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
Код: sql
1.
Это как раз не трудно


- корректный UTF-8. И что с ним дальше делать?
Можно определить некоторые случаи, когда текст НЕ в UTF-8. Но это лишь подмножество из возможного количества вариантов

что делать? обрабатывать.

Да, это лишь подмножества.
Корректные тексты вообще - лишь подмножества из всех возможных сочетаний байтов.

Да, кстати, если ещё не сталкивались.
У великолепнейшего класса TEncoding есть ещё одна фишка - он НЕ возвращает ошибок.
Т.е. при скармливании тому же TEncoding.UTF8 некорректного текста - он вернёт не ошибку, а пустую строку.

Особенно это было весело, когда нужно было древний проект (Delphi 5, данные хранились в БД в виде DFM, названия этих потомков TComponent были в windows-1251 (формально так нельзя, но никто не проверял и не запрещал)) перевести на новые юникодные Delphi (где это формально можно, но в UTF-8).

Пришлось создавать собственный "двойной" TEncoding и патчить в памяти то ли TComponent, то ли TReader, то ли оба
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776247
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докесть модуль LConvEncoding с волшебной функцией GuessEncoding

есть с древнейших времён TCode от Alex Boiko

но она работает только с русским языком и совсем не работает с остальными

опять, блин, только лишь подмножество.....
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776280
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

т.е., например, в Берлин Хеми она не сработает, если р и X латинские?
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776297
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,

там всё остальное русское :-)

попробуй.

вообще, статистика накапливается на больших массивах слов, два слова это всё равно голодный паёк для статистики
...
Рейтинг: 0 / 0
Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
    #39776414
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Тут не слова, а тупо фиксированный справочник фирм, и туева хуча тупых баб, которые руками отправляли названия ручками. Сохласен, пример неудачен. Чаще попадались лати латинские названия с кир.буквами.
________________
Мне насрать, давно, У меня русский редко попадает, чего не скажешь о датчах
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кракозябры и иероглифы при чтении и записи из текстового файла или Memo в blob и обратно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]