0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 73
1

Кракозябра с кодировкой

05.06.2017, 03:47. Показов 4110. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ! помогите пожалуйста разобраться с кодировкой =(

читаю из буфера строку PChar(P)

Delphi
1
2
3
    Buffer:=UnicodeString(PChar(P));
    Form1.Memo1.Lines.Add(Buffer);
    Form1.Memo1.Lines.Add('***');
в Memo выходит кракозябра =(
Кракозябра с кодировкой


вместо UnicodeString пробовал ещё Utf8ToAnsi / AnsiToUtf8 / ansiString / utf8String / UTF8Decode / UTF8Encode
ничего не помогает =(

причём если сохранить кракозябру через notepad в unicode и потом открыть как обычный текст через F3 то всё читается:
Кракозябра с кодировкой


что ещё можно попробовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2017, 03:47
Ответы с готовыми решениями:

С кодировкой базы данных и кодировкой сайтом и кодировкой файла разобраться не могу
С кодировкой базы данных и сайтом файлом разобраться не могу. Я на своем сайте вывожу данные из...

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

Именнованые каналы и кракозябра
Здравствуйте, есть задание написать запись и чтение для именновоного канала(FIFO) вроде бы ничего...

Кракозябра а не нормальный текст
Я не могу понять почему у меня кракозябра а не нормальный текст отображается в заголовке столбцов ...

12
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 73
05.06.2017, 04:55  [ТС] 2
есть ещё UnicodeToUtf8 и Utf8ToUnicode но никто не знает как ими пользоваться =(
нет ни одного рабочего примера весь гугл перерыл =(
0
378 / 331 / 89
Регистрация: 26.05.2010
Сообщений: 750
05.06.2017, 06:52 3
Проект выложи и файл с данными откуда что читаешь, а так только гадать можно, у тебя изначальная кодировка какая, хочешь загрузить в мемо файл?
0
5656 / 4418 / 1409
Регистрация: 14.04.2014
Сообщений: 19,772
Записей в блоге: 20
05.06.2017, 07:35 4
судя по картинке, вообще никаких UnicodeToUnicode не требуется, т.к. у вас и так unicode delphi
0
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 73
05.06.2017, 15:02  [ТС] 5
Цитата Сообщение от krapotkin Посмотреть сообщение
судя по картинке, вообще никаких UnicodeToUnicode не требуется, т.к. у вас и так unicode delphi
нет если просто PChar(P) выводить, то тоже самое, там японская килиберда.

Добавлено через 1 минуту
Цитата Сообщение от Zombi_sib Посмотреть сообщение
Проект выложи и файл с данными откуда что читаешь, а так только гадать можно, у тебя изначальная кодировка какая, хочешь загрузить в мемо файл?
кодировка может быть разная. мне главное понять какая тут. в проекте ничего интересно нету. там не указана кодировка
0
5656 / 4418 / 1409
Регистрация: 14.04.2014
Сообщений: 19,772
Записей в блоге: 20
05.06.2017, 15:48 6
понять какая кодировка в исходном файле ну очень несложно.
загрузите его в Notepad++ или в far'е в редакторе откройте
а в memo.lines.loadFromFile()
есть в том числе параметр Encoding
http://docwiki.embarcadero.com... adFromFile
экспериментируйте
0
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 73
05.06.2017, 17:38  [ТС] 7
Цитата Сообщение от krapotkin Посмотреть сообщение
а в memo.lines.loadFromFile()
есть в том числе параметр Encoding
если сохраняю это в файл а потом открываю его вот так
form1.Memo1.Lines.LoadFromFile('test.dat',TEncoding.ANSI);
то всё открывается ...

но почему тогда сразу вот так не открывает
Buffer:=AnsiString(PChar(P));

как-то глупо сохранять строку в файл чтоб открыть её =(

Добавлено через 7 минут
тоесть вот так всё работает
Delphi
1
2
3
4
5
6
         buffer:=pchar(P);
 
          form1.Memo1.Lines.Add(buffer);
          form1.Memo1.Lines.SaveToFile('test',TEncoding.Unicode);
          form1.Memo1.Lines.LoadFromFile('test',TEncoding.ANSI); //TEncoding.GetEncoding(CP_ACP);
          Form1.Memo1.Lines.Add('***');
то всё открывается ...

но почему тогда сразу не открывает?
Buffer:=AnsiString(PChar(P));
0
884 / 586 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
05.06.2017, 18:09 8
Надо весь код. А то многое непонятно, например вот чего такое это загадочное P? Какого типа? Как и откуда туда попадают данные?
0
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 73
05.06.2017, 18:15  [ТС] 9
Цитата Сообщение от GoodWeather Посмотреть сообщение
вот чего такое это загадочное P? Какого типа? Как и откуда туда попадают данные?
вам это ничего не даст только запутаетесть

Delphi
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
 MS:=TMemoryStream.Create;
 
  if OpenClipboard(0) then
  begin
 
    CBFList:=TList.Create;
    CBF:=0;
    repeat
    CBF:=EnumClipboardFormats(CBF);
    if CBF<>0 then CBFList.Add(Pointer(CBF));
    until CBF=0;
 
    if CBFList.Count>0 then
    begin
    Temp:=CBFList.Count;
    MS.Write(Temp,SizeOf(Integer));
 
      for I:=0 to CBFList.Count-1 do
      begin
      H:=GetClipboardData(Cardinal(CBFList[I]));
 
        if H>0 then
        begin
          CBBlockLength:=GlobalSize(H);
          if H>0 then
          begin
            P:=GlobalLock(H);
Добавлено через 3 минуты
Delphi
1
2
3
4
5
6
7
8
var
  H: THandle;
  P: Pointer;
  I: Integer;
  CBFList: TList;
  BufferData,CBF,CBBlockLength,Temp: Cardinal;
  Buffer: String;
  MS: TMemoryStream;
0
5656 / 4418 / 1409
Регистрация: 14.04.2014
Сообщений: 19,772
Записей в блоге: 20
05.06.2017, 18:28 10
если у вас строка AnsiString то логично что на нее должен указывать PAnsiChar ?
тогда, т.к. присваивания между ссылками на строку и строками работают, то
для версий делфи >= 2009
Delphi
1
2
3
4
var s:AnsiString;buffer:string;
...
s:=pansichar(p);
buffer:=s;
строка 13 по-моему должно бы быть так:
Delphi
1
2
3
4
Temp:=CBFList.Count;
if Temp>0 then
begin
    MS.Write(Temp,SizeOf(Temp));
далее ваш алгоритм работы с Clipboard очень странный
вы вполне можете не считывать все доступные варианты, а попросить те, которые вам предпочтительны
самое простое
Delphi
1
2
3
Uses Clipbrd
 
memo.lines.text := Clipboard.AsText;
зачем вообще весь этот огород и локи перелоки?
1
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 73
06.06.2017, 02:16  [ТС] 11
Цитата Сообщение от krapotkin Посмотреть сообщение
на нее должен указывать PAnsiChar
вот это Точно! сработало =) СПАСИБО! =)

Цитата Сообщение от krapotkin Посмотреть сообщение
зачем вообще весь этот огород и локи перелоки?
Уважаемый господин Крапоткин Вы абсолютно правы) но именно в моём случае это необходимо...
дело в том что этот код сохраняет всё содержимое Буфера Обмена в специальный файл.

(далее идёт обработка и обратная загрузка в буфер обмена)

А нужно это для того чтоб не страдал текст с разметкой... то есть если у нас например скопирован текст такого вида:
Кракозябра с кодировкой


чтоб сохранялся размер текста.. цвет.. итд
форматы при этом могут быть абсолютно разные... и при этом нужно вносить изменения в тексте.
0
5656 / 4418 / 1409
Регистрация: 14.04.2014
Сообщений: 19,772
Записей в блоге: 20
06.06.2017, 06:56 12
вы все форматы по очереди в файл складываете?
0
0 / 0 / 0
Регистрация: 18.10.2013
Сообщений: 73
06.06.2017, 13:45  [ТС] 13
Цитата Сообщение от krapotkin Посмотреть сообщение
вы все форматы по очереди в файл складываете?
Ну вроде как да... потом ищу определённый текст.. исправляю.. загружаю это опять в буфер и там уже должен оказаться исправленный текст с сохранением всех пропорций и разметки.
0
06.06.2017, 13:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2017, 13:45
Помогаю со студенческими работами здесь

IdMessage Кодировка-кракозябра
Вопрос избит, но! Ни одно из найденных мной решений не действует. Суть: Есть почтовый клиент, шлет...

кракозябра (Delphi XE2)
приветствую. есть сайт, на нем кодировка windows-1251. парсю его название и в программу мне...

Sqlite3 вместо данных из таблицы кракозябра)
Вместо данных из таблицы получаю вот такую: ќ±'иЎv кракозябру) что делать?

Кодировка базы Access , отображение русских букв - кракозябра
Всем привет. Наткнулся на следующую проблему: пишу программу на С++ Qt для работы с базой данных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru