![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Список кодировок
leonidus © (2004-09-14 09:20:00)Мастера нужен совет. Очень надо получить список всех колироввок установленных на данном компе (как их показывает IE) и для каждой кодировки получить набор символов что бы можно было очуществялять перекодировку html-документов. Я так понимаю что кодировки это просто файлы которые можно подгрузить из интернета, а значит они где-то хранятся на винте. Подскажите пожалуйста куда копать.
leonidus (2004-09-22 13:35:00) [1]>VMcL ну и хорошо что понимает, мне бы хотябы этот список поиметь
VMcL (2004-09-22 11:43:00) [2]>> leonidus (14.09.04 09:20)
AFAIK, IE показывает список кодировок, который понимает собственно IE. У Оперы, например, свой список кодировок.
leonidus (2004-09-22 11:24:00) [3]вот что я нарыл: http://wdh.suncloud.ru/default.htm?charsets.htmесли кому-то интересно станет
Суслик (2004-09-22 10:55:00) [4]
> но там же не все кодировки
ищи в сети
т.к. кодировки стандартизированы, то они должны быть описаны в стандартах.
Я не знаю кто их стандратизирует (iso кажется или еще кто-то), но это должна быть общедоступная информация.
может это поможет ftp://dkuug.dk/i18n/
там до фига кодировок.
leonidus (2004-09-22 10:45:00) [5]но там же не все кодировки
Суслик (2004-09-21 13:50:00) [6]
> [36] leonidus (21.09.04 13:23)
готовый списко кодировок из [34] тебе чем не подходит?
занести таблицу к себе в прогу дело пяти минут :)
leonidus (2004-09-21 13:23:00) [7]да искал, нет там ничего. может ктонибудь сьалкивался?
Суслик (2004-09-17 15:18:00) [8]поищи в указанном разделе - может там и есть нужная тебе функция, которая по идентфикатору кодовой страницы давала ее имя.
Суслик (2004-09-17 15:16:00) [9]
> [33] leonidus (17.09.04 15:10)
> ну в принципе можно конечно и таблицу, если ничего другого
> не останется, вы не видели такую таблицу в MSDN, а то поиск
> по "code page" ничего не дал
пока не научишься читать то, что тебе указали не сможешь развиваться :)))
вот ссылка из раздела, который я тебе в ответе [1] указал :))))))
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_81rn.asp
leonidus (2004-09-17 15:10:00) [10]ну в принципе можно конечно и таблицу, если ничего другого не останется, вы не видели такую таблицу в MSDN, а то поиск по "code page" ничего не дал
Суслик (2004-09-17 15:01:00) [11]
> [31] leonidus (17.09.04 14:55)
> [28] - это окончателно работающий вариант
Этттта, твой вариант с циклом работал не хуже :)))
> а теперь другой момент, с помошью кода [14] я получаю номера
> всех кодировок установленных на компе, а как для юзера отобразить
> название кодирововк а не только ее номер (сажем 20866 это
> KOI8)?
Скажу честно, как вытянуть это из системы не знаю - не разбирался.
Но как выход могу предложить скопировать из MSDN таблицу с номерами и названиями и при отображении пользователю зная номер кодировки находить имя кодировки.
Наверняка можно проще - не знаю.
leonidus (2004-09-17 14:55:00) [12][28] - это окончателно работающий вариант
а теперь другой момент, с помошью кода [14] я получаю номера всех кодировок установленных на компе, а как для юзера отобразить название кодирововк а не только ее номер (сажем 20866 это KOI8)?
суслик (2004-09-17 14:48:00) [13]ты наверное английские символы переводил - они и не должны меняться.
поробуй русские. твой код нормально работает.
суслик (2004-09-17 14:47:00) [14]какую ты строку передаешь?
из какиз символов?
leonidus (2004-09-17 14:45:00) [15]и так, если кому интересно вот работающий код
function StringToWideStringEx(const S: string; CodePage: Word): WideString;
var
InputLength,
OutputLength: Integer;
begin
InputLength := Length(S);
OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0);
SetLength(Result, OutputLength);
MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength);
end;
function WideStringToStringEx(const WS: WideString; CodePage: Word): string;
var
InputLength,
OutputLength: Integer;
begin
InputLength := Length(WS);
OutputLength := WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, nil, 0, nil, nil);
SetLength(Result, OutputLength);
WideCharToMultiByte(CodePage, 0, PWideChar(WS), InputLength, PChar(Result), OutputLength, nil, nil);
end;
edit2.text:=WideStringToStringEx(StringToWideStringEx(edit1.text, 20866), 1251);
leonidus (2004-09-17 14:05:00) [16]продолжаю эксперименты, хочу перекодировать строку KOI8 в Windows1251
kS := Edit1.Text;
for i:=1 to length(kS) do
begin
st:=kS[i];
MultiByteToWideChar(866, 0, @st, 1, @kWC, 1);
WideCharToMultiByte(1251, 0, @kWC, 1, @st, 1, nil, nil);
listbox1.Items.Add(st);
end;
а в результате преобзазование не происходит - на выходе таже строка что и на входе
leonidus (2004-09-17 13:09:00) [17]сделал так:
kS := Edit1.Text;
for i:=1 to length(kS) do
begin
st:=kS[i];
MultiByteToWideChar(1251, 0, @st, 1, @kWC, 1);
listbox1.Items.Add(kWC);
end;
теперь вроде работает
leonidus (2004-09-17 09:42:00) [18]мастера, ну подскажите плиз, ОЧЕНЬ надо!!!
leonidus (2004-09-17 08:39:00) [19]int MultiByteToWideChar(
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // address of string to map
int cchMultiByte, // number of characters in string
LPWSTR lpWideCharStr,// address of wide-character buffer
int cchWideChar // size of buffer
);
CodePage - номер кодовой страницы (я так понял это номер кодовой страницы того символа который мы будем конвертить в юникод)
lpMultiByteStr - указатель на исходную строку
cchMultiByte - длина строки
lpWideCharStr - адрес выходной строки
cchWideChar - размер буфера под выходную строку
тогда делаю так:
kS := Edit1.Text;
MultiByteToWideChar(1251, 0, @kS, length(ks), @kWC, 1);
edit2.Text:=kWC;
Т.е. я так понял, что kS это входная строка в кодировке 1251, kWC будет выходная строка в кодировке unicod но почему же она длиной 1?
в edit1 ввожу "привет" в edit2 выводится один символ "ь", если размер буфера увеличиваю до двух - появляется ошибка. Где же грабли?
Cobalt (2004-09-17 01:01:00) [20]2 leonidus (16.09.04 20:55) [22]
> что же я делаю не так?
Ты забыл прочитать справку по используемой тобой функции!
Всё-таки, не надо тупо копировать код - от этого ничего хорошего не получается - сам видишь!