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