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

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

Список кодировок


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

leonidus ©   (2004-09-14 09:20:00) 

Мастера нужен совет. Очень надо получить список всех колироввок установленных на данном компе (как их показывает IE) и для каждой кодировки получить набор символов что бы можно было очуществялять перекодировку html-документов. Я так понимаю что кодировки это просто файлы которые можно подгрузить из интернета, а значит они где-то хранятся на винте. Подскажите пожалуйста куда копать.


leonidus   (2004-09-16 20:55:00) [21]

что же я делаю не так?


leonidus   (2004-09-16 08:50:00) [22]

как откуда взял, из [16], и несколько переработал, после чего зародилось сомнение, в правильности переработки...


Cobalt   (2004-09-15 21:49:00) [23]

2 leonidus   (15.09.04 13:03) [19]
Скажи пожалуйста, откуда ты взял этот кусок кода?


leonidus   (2004-09-15 13:03:00) [24]

Суслик, беру ваш алгоритм, делаю:

str:tstringlist;
s:array[1..200] of integer;

begin
str:=tstringlist.Create;
str.LoadFromFile('autoname.htm');
kS:=str[0];//читаем первую строку из файла
str.Free;
for i:=1 to length(kS) do
 begin
  s[i]:=MultiByteToWideChar(1251, 0, @kS[i], i,  @kWC, length(kS));
 end;
получаю массив s совершенно не понятного содержания, тут же возникли подозрения что в MultiByteToWideChar передал параметры не верно...


Суслик   (2004-09-15 11:07:00) [25]

тогда, думаю, тебе надо воспользоваться двумя функциями

1) multibytetowidechar - для перевода строки в исходной кодировке в unicode
2) widechartomultibyte - для перевода получившегося на шаге 1) unicode в строку в нужной кодировке.

Как пользоваться multibytetowidechar я выше показал.
На каждой из этих функций нажми f1 - справка дельфи о них неплохо рассказвает. Если нужно больше информации см здесь msdn.microsoft.com


leonidus   (2004-09-15 11:01:00) [26]

поясню еще раз, надо написать процедуру, которой передаем строку из html-документа в какой-то кодировке (будем считать что эта кодировка на компе установлена) и на выходе процедуры надо получить туже строку но перекодированную в другую установленную на данном компе кодировку. Если это KOI8 > Windows 1251 понятно как сделать, а если например Турецкая (ISO) в Турецкую (Windows) совсем не понятно.


Суслик   (2004-09-15 10:57:00) [27]


>  [15] leonidus   (15.09.04 10:50)

Может я не очень понимаю, что тебе нужно, но как я думаю тебе бы помогла функция MultiByteToWideChar. С помощью нее можно перекодировать символ из любой кодировки с помощью любой (установленной) кодовой страницы в unicode символ.
var
  kWC: WideChar;
  kS: String;
begin
  kS := Edit1.Text;
  MultiByteToWideChar(1251{номер кодировки}, 0, @kS[1], 1,  @kWC, 1);
end;


leonidus   (2004-09-15 10:50:00) [28]

Verg - номера кодовых страниц установленных на данном компьютере получил - большое спасибо, но мне же нужна сама кодовая страница для каждой кодировки, потому что потом необходимо будет перекодировать html-документы. Как теперь быть?


Verg   (2004-09-15 09:27:00) [29]

function  EnumCodePagesProc(lpCodePageString : pchar ):DWORD; stdcall;
begin
 Form1.ListBox1.Items.Add(lpCodePageString);
 result := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if not EnumSystemCodePages(@EnumCodePagesProc, CP_INSTALLED )  then
   ShowMessage('EnumSystemCodePages Error: '+SysErrorMessage(GetLastError));
end;


leonidus   (2004-09-15 08:58:00) [30]

Мастера, я вижу вы сталкивались с фуекцией EnumCodePagesProc - очень прошу, киньте маленький примерчик, жутко туплю я с этими обратными вызовами.


Verg   (2004-09-14 20:56:00) [31]

А я вот сталкивался с тем, что вне зависимости от результата возвращаемого  EnumCodePagesProc callback function енумерация не прекращается.


Sergey Kaminski   (2004-09-14 20:51:00) [32]

Суслик ©   (14.09.04 20:40) [9]

Сорри, невнимательно прочитал. С этим нюансом тоже сталкивался.


Суслик   (2004-09-14 20:45:00) [33]


> но какое это имее отношение к списку кодировок установленных
> в системе

самое прямое.
она выводит установленные или поддерживаемые (в зависимости от параметра) в системе кодовые страницы.


> тем более к возможности перекодирования html-файлов?

понятия не имею - я лично что-нить про это говорил?


Суслик   (2004-09-14 20:40:00) [34]


>  [8] Sergey Kaminski ©   (14.09.04 20:19)

читай внимательней


> то отклонение от стандарта - за true они считаю именно 1,
> а не как положено: не0.

я как раз и имел в виду, что за true считает не 0.

Беда в том, что если указанную callback фукнцию описать также как это сделано в мсдн (т.е. с результатом bool), то при присвоении ей true реально получается "-1", а фукнция требует именно 1!
Я долго с этим в свое время разбирался.

Даже на форуме это было. Со мной даже ИШ согласился.


Sergey Kaminski   (2004-09-14 20:19:00) [35]

Суслик ©   (14.09.04 11:23) [5]

у них (microsoft) там, если не ошибка, то отклонение от стандарта - за true они считаю именно 1, а не как положено: не 0.


Позвольте узнать, в каком таком стандарте True=0?!


leonidus   (2004-09-14 15:57:00) [36]

пошарился по инету в поисках описания функции EnumSystemCodePages - всего три упоминания и то на Си, посмотрел справку и в упор не понял, а что собственн я этой функции должен передать и чего от не ожидать (ну понятно что boolean) но это получается вроде ответ на то что в процедуру подано на вход, но какое это имее отношение к списку кодировок установленных в системе и тем более к возможности перекодирования html-файлов?


leonidus   (2004-09-14 15:57:00) [37]

пошарился по инету в поисках описания функции EnumSystemCodePages - всего три упоминания и то на Си, посмотрел справку и в упор не понял, а что собственн я этой функции должен передать и чего от не ожидать (ну понятно что boolean) но это получается вроде ответ на то что в процедуру подано на вход, но какое это имее отношение к списку кодировок установленных в системе и тем более к возможности перекодирования html-файлов?


Суслик   (2004-09-14 11:23:00) [38]

Автору.

Если будешь пользоваться EnumSystemCodePages, то описывай callback функцию с результатом integer и возвращай 1. Если опишешь с результатом BOOL и будешь возвращать TRUE, то работать не будет - у них (microsoft) там, если не ошибка, то отклонение от стандарта - за true они считаю именно 1, а не как положено: не 0.


TUser   (2004-09-14 11:17:00) [39]

EnumSystemCodePages, кажется


Суслик   (2004-09-14 11:14:00) [40]


>  [2] leonidus   (14.09.04 11:01)


> но там ничего конкретного нет:)

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


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

Наверх

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