Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > как узнать название кодировки?


Автор: ilyalyu 15.9.2008, 19:08
Такая проблема. Имеется текст содержащий русские символы. Его нужно сохранить в формате HTML. Для того чтобы русские символы нормально отображались в браузере, к HTML-коду необходимо добавить:
Код
<meta http-equiv="Content-Type" content="text/html;charset=CHARSET_NAME" />

где CHARSET_NAME - название кодировки. В моем случае это "Windows-1251", т.е. добавлять нужно:
Код
<meta http-equiv="Content-Type" content="text/html;charset=Windows-1251" />

Однако, у пользователя может быть не русская Windows и совсем другая кодировка. Поэтому название кодировки надо определить программно (а не подсмотреть в браузере). Вот в этом и вопрос.

(Небольшое уточнение: текст не прислан с какого-то другого компьютера, а набран внутри самой программы, например, в TMemo; т.е. задача - не пытаться распознать кодировку неизвестного текста, а определить какая кодировка была использована в компоненти TMemo).


Автор: Matematik 15.9.2008, 19:42
> Однако, у пользователя может быть не русская Windows и совсем другая кодировка. 

Все современные (и не очень) браузеры знают кириллицу (Windows-1251). Текст будет отображаться в той кодировке которую укажешь в META.

Автор: aleksh 15.9.2008, 20:06
а откуда мы узнаем какие буквы русские? откуда текст? точно надо указывать, ибо если потом читать браузерам -- большинство само выбирет правильную кодировку? юникод может быть?

а если по сути -- если память мне не изменяет, то смотрится в каком диапазоне код символа

Автор: Snowy 15.9.2008, 21:05
DRKB 
Системные функции и WinAPI -> Windows -> Шрифты, языки, кодировки -> Многоязычие, локализации и перекодировка -> Распознавание кодировки
 

Автор: ilyalyu 15.9.2008, 23:11
To Snowy: спасибо за ссылку, но там рассматривается несколько другой вопрос. 

Там рассматривается случай, когда имеется текст неизвестного происхождения и нужно определить в какой он кодировке.

 У меня ситуация другая: текст набран в программе и отображается, допустим, в TMemo. Поэтому мне не нужно анализировать сам текст (тем более что этот метод ненадежен). Достаточно программно определить, какая кодировка используется в TMemo.

Автор: Snowy 16.9.2008, 13:37
Тогда проще. 
GetTextCharsetInfo

Автор: ilyalyu 16.9.2008, 14:28
Спасибо, действительно GetTextCharsetInfo(Canvas.Handle) возвращает номер чарсета, а по нему уже можно востановить и название

Код

function CharSet2HTMLLang(CharSet: TFontCharset): String;
begin
  case CharSet of 
    SHIFTJIS_CHARSET:    Result := 'shift_jis';
    HANGEUL_CHARSET:     Result := 'EUC-KR';
    JOHAB_CHARSET:       Result := 'CP1361';
    GB2312_CHARSET:      Result := 'gb2312';
    CHINESEBIG5_CHARSET: Result := 'big5';
    GREEK_CHARSET:       Result := 'Windows-1253';
    TURKISH_CHARSET:     Result := 'Windows-1254';
    VIETNAMESE_CHARSET:  Result := 'Windows-1258';
    HEBREW_CHARSET:      Result := 'Windows-1255';
    ARABIC_CHARSET:      Result := 'Windows-1256';
    BALTIC_CHARSET:      Result := 'Windows-1257';
    RUSSIAN_CHARSET:     Result := 'Windows-1251';
    THAI_CHARSET:        Result := 'Windows-874';
    EASTEUROPE_CHARSET:  Result := 'Windows-1250';
    OEM_CHARSET:         Result := 'ascii';
    ANSI_CHARSET:        Result := 'Windows-1252';
    else                 Result := '';
  end;
end;


Вопрос закрыт

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)