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-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]
> что же я делаю не так?
Ты забыл прочитать справку по используемой тобой функции!

Всё-таки, не надо тупо копировать код - от этого ничего хорошего не получается - сам видишь!


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

Наверх

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