Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как узнать название кодировки? 
V
    Опции темы
ilyalyu
Дата 15.9.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Такая проблема. Имеется текст содержащий русские символы. Его нужно сохранить в формате 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).



Это сообщение отредактировал(а) ilyalyu - 15.9.2008, 23:16
PM MAIL   Вверх
Matematik
Дата 15.9.2008, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



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

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

PM MAIL WWW ICQ   Вверх
aleksh
Дата 15.9.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



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

а если по сути -- если память мне не изменяет, то смотрится в каком диапазоне код символа
PM MAIL   Вверх
Snowy
Дата 15.9.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



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

PM MAIL   Вверх
ilyalyu
Дата 15.9.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



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

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

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

Это сообщение отредактировал(а) ilyalyu - 15.9.2008, 23:13
PM MAIL   Вверх
Snowy
Дата 16.9.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Тогда проще. 
GetTextCharsetInfo
PM MAIL   Вверх
ilyalyu
Дата 16.9.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Спасибо, действительно 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;


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

Это сообщение отредактировал(а) ilyalyu - 16.9.2008, 22:29
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.