New user registration is currently disabled due to spam abuse / Регистрация новых пользователей в настоящее время приостановлена из-за злоупотреблений спаммерами

Символы Windows ANSI вместо UTF-8

Сообщаем о найденных ошибках сюда

Символы Windows ANSI вместо UTF-8

Postby Michael72 » Sat Apr 26, 2014 1:38 pm

Операционная система: Windows 7 Профессиональная, Service Pack 1
Версия словаря GoldenDict: 1.5.0-RC-293-g75ed194
Словарь:
В меню Правка - Словари - Источники (F3) во вкладке "Программы" щелкните на кнопке Добавить и создайте новую запись. Установите Тип на Текст. В поле "Имя программы" напечатайте "Словари в сети ДВО". Впечатайте в поле "Командная строка":
Code: Select all
dict\dict -M -h dict.dvo.ru -s word %GDWORD%
и щелкните на OK.
Скопируете этот архив в подкаталог dict того каталога, куда вы установили программу GoldenDict. Например: C:\Program Files\GoldenDict\dict
Действия: В поле поиска напечатайте слово "лоханка" и нажмите на Enter.
Скрин-шот:

GoldenDict14.PNG
GoldenDict, версия 1.5.0-RC-293-g75ed194
GoldenDict14.PNG (67.45 KiB) Viewed 40792 times

Суть проблемы: На скриншоте наглядно видно, что текст в формате Юникод UTF-8 отображается как текст в формате ANSI.
Last edited by Michael72 on Thu Jan 08, 2015 3:08 pm, edited 2 times in total.
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Символы Windows ANSI вместо UTF-8

Postby Abs62 » Sat Apr 26, 2014 2:31 pm

А откуда GD может узнать, в какой кодировке ему подсовывают текст - локали, UTF-8, UTF-16 или ещё какой? dict.exe - что это за программа?
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Символы Windows ANSI вместо UTF-8

Postby Michael72 » Sat Apr 26, 2014 2:59 pm

Abs62 wrote:А откуда GD может узнать, в какой кодировке ему подсовывают текст - локали

В меню Правка - Словари - Источники - Программы в колонке Тип есть список опций:
  • Аудио
  • Текст
  • Html
  • По префиксу
Если задан тип контента Html, то GoldenDict откуда-то же может узнать, в какой кодировке:

GoldenDict15.PNG
GoldenDict, версия 1.5.0-RC-293-g75ed194
GoldenDict15.PNG (71.07 KiB) Viewed 40792 times

Что мешает точно также узнавать кодировку и для типа Текст?
Abs62 wrote:... UTF-8, UTF-16 или ещё какой

А каким образом Блокнот справляется с этой задачей? Откройте в Блокноте текстовый файл, и он как правило автоматически определяет в каком формате текст.
Abs62 wrote:dict.exe - что это за программа?

dict.exe – это консольный dict-клиент. Исходники для сборки взяты здесь. Собиралось в Cygwin.

P.S. Пользуясь случаем хотелось бы спросить, а для чего служит опция По префиксу? Как ей пользоваться?
Last edited by Michael72 on Thu Jan 08, 2015 3:12 pm, edited 1 time in total.
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Символы Windows ANSI вместо UTF-8

Postby Abs62 » Sat Apr 26, 2014 3:21 pm

Michael72 wrote:Если в меню Правка - Словари - Источники - Программы задан тип контента Html, то GoldenDict откуда-то же может узнать, в какой кодировке:
Что мешает точно также узнавать кодировку и для типа Текст?

В html есть тег <meta> с указанием кодировки. А если его нет, то точно так же не может. Просто умолчания разные - UTF-8 для "Html" и локальная восьмибитная для "Текст".
Michael72 wrote:А каким образом Блокнот справляется с этой задачей? Откройте в Блокноте текстовый файл и он как правило автоматически определяет в каком формате текст.

Либо точно по маркеру в начале файла, либо строит предположения по первым символам без какой-либо гарантии.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Символы Windows ANSI вместо UTF-8

Postby Abs62 » Sat Apr 26, 2014 3:35 pm

Michael72 wrote:Пользуясь случаем хотелось бы спросить, а для чего служит опция По префиксу? Как ей пользоваться?

Этот вариант означает, что программа выдаёт не перевод, а список предположительно подходящих под запрос слов. Этот список будет добавлен в список вариантов, что под строкой поиска.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Символы Windows ANSI вместо UTF-8

Postby Michael72 » Sat Apr 26, 2014 4:46 pm

Abs62 wrote:
Michael72 wrote:Если в меню Правка - Словари - Источники - Программы задан тип контента Html, то GoldenDict откуда-то же может узнать, в какой кодировке:
Что мешает точно также узнавать кодировку и для типа Текст?

В html есть тег <meta> с указанием кодировки. А если его нет, то точно так же не может. Просто умолчания разные - UTF-8 для "Html" и локальная восьмибитная для "Текст".
Michael72 wrote:А каким образом Блокнот справляется с этой задачей? Откройте в Блокноте текстовый файл и он как правило автоматически определяет в каком формате текст.

Либо точно по маркеру в начале файла, либо строит предположения по первым символам без какой-либо гарантии.

А нельзя ли в таком случае сделать новый тип, который будет называться либо Авто, либо MIME. Суть в следующем. Тип контента будет задаваться MIME-заголовком. Например:
Content-type: text/html; charset=utf-8
Content-transfer-encoding: 8bit


Если MIME-заголовок отсутствует, то текст воспринимается как PlainText в кодировке UTF-8 (по аналогии с опцией "Html"). Это вкратце, а по большому счёту хотелось бы иметь некую заточку под работу с консольным dict-клиентом.
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Символы Windows ANSI вместо UTF-8

Postby Abs62 » Sat Apr 26, 2014 5:14 pm

Michael72 wrote:Тип контента будет задаваться MIME-заголовком.

Клиент умеет выдавать такие заголовки?
Michael72 wrote:Это вкратце, а по большому счёту хотелось бы иметь некую заточку под работу с консольным dict-клиентом.

Хм. А поподробнее можно?
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Символы Windows ANSI вместо UTF-8

Postby Michael72 » Sat Apr 26, 2014 9:08 pm

Abs62 wrote:
Michael72 wrote:Тип контента будет задаваться MIME-заголовком.

Клиент умеет выдавать такие заголовки?
Michael72 wrote:Это вкратце, а по большому счёту хотелось бы иметь некую заточку под работу с консольным dict-клиентом.

Хм. А поподробнее можно?

Я думаю, что сразу на два вопроса, лучше всего ответить путем демонстрации результата, который выдаёт консольный словарь dict:
Code: Select all
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Михаил>cd C:\Program Files\GoldenDict\dict

C:\Program Files\GoldenDict\dict>dict -M -h dict.dvo.ru -s word aaa

From mech [mech_mime]:

  Content-type: text/x-lingvo-dsl
  Content-transfer-encoding: 8bit

  AAA
    [i][c]сокр., воен.[/c][/i]
    [trn]anti-aircraft  artillery,  зенитная  артиллерия,  артиллерия ПВО,
    зенитный[/trn]
    [ex][*]Viewers  heard  debriefing  pilots  say  triple A, or A.A.A. in
    reference   to   cannons  and  machine  guns  but  not  surface-to-air
    missiles[/*][/ex]
    <<AAA battalion>>

From mech [mech_mime]:

  Content-type: text/x-lingvo-dsl
  Content-transfer-encoding: 8bit

  AAA battalion
    [i][c]воен.[/c][/i]
    [trn]зенитный батальон[/trn]

From mech [mech_nomime]:


  AAA
          (сокр., воен.)
          anti-aircraft  artillery,  зенитная  артиллерия, артиллерия ПВО,
          зенитный
          Ex:  Viewers  heard debriefing pilots say triple A, or A.A.A. in
          reference  to  cannons  and  machine guns but not surface-to-air
          missiles
          {AAA battalion}


From mech [mech_nomime]:


  AAA battalion
          (воен.)
          зенитный батальон


From List of abbreviations [mueller-abbrev]:


  AAA

    American Automobile Association американская автомобильная ассоциация

From List of abbreviations [mueller-abbrev]:


  A.A.A.

    Amateur Athletic Association Ассоциация спортсменов-любителей

From V.E.R.A. -- Virtual Entity of Relevant Acronyms [vera]:


  @item AAA

C:\Program Files\GoldenDict\dict>

На DICT-сервере dict.dvo.ru в настоящий момент есть словарь, который имеет словарную базу с MIME-контентом. Это позволяет наглядно увидеть, каким образом DICT-сервер отдаёт MIME-заголовки. Правда точнее будет сказать, каким образом dict-клиент dict их отображает. В вышеприведённом примере посылается запрос на DICT-сервер с ключом -M, таким образом dict передаёт серверу команду OPTION MIME (см. A Dictionary Server Protocol – OPTION MIME). На DICT-сервере есть словарь mech, который можно рассматривать как один модуль, состоящий из двух словарей: mech_nomime (с PlainText контентом) и mech_mime (с MIME контентом). Получив опцию OPTION MIME, dict-сервер должен отдавать MIME content именно из словаря mech_mime, при этом, как мы видим из логов, перед каждой словарной статьёй имеется MIME заголовок.

Примечание.
На DICT-сервере неправильная настройка для модуля mech, поэтому в логах виден одновременно и результат из словаря mech_nomime. Так не должно быть, но сейчас это не принципиально важно.

GoldenDict должен правильно обработать MIME-заголовки для каждой отдельной статьи и в соответствии с этим заголовком отображать результат. В случае, если у статьи нет заголовка, то воспринимать как PlainText с кодировкой UTF-8.
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Re: Символы Windows ANSI вместо UTF-8

Postby Abs62 » Sat Apr 26, 2014 9:49 pm

Это он и в DSL формате подсунуть может? А каких ещё сюрпризов от него можно ожидать? Кажется это попахивает большим геморроем...
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Символы Windows ANSI вместо UTF-8

Postby Michael72 » Sat Apr 26, 2014 10:02 pm

Abs62 wrote:Это он и в DSL формате подсунуть может? А каких ещё сюрпризов от него можно ожидать?

Для начала хотелось бы иметь поддержку только для заголовка:
Code: Select all
Content-type: text/html; charset=utf-8
Content-transfer-encoding: 8bit

Это в итоге откроет очень интересные возможности. К примеру создадим словарь "Большая Советская Энциклопедия" с иллюстрациями. В итоге для многих будет доступна эта энциклопедия в режиме он-лайн. Альтернативный путь – найти её в интернете и скачать себе на диск требует слишком больших усилий.

Для тестирования данного MIME-заголовка могу предложить другой DICT-сервер: dict.bibleonline.ru; словари:
  • heb-rus_strong
  • ell-rus_strong
Настройка на сервере для этих модулей безупречна. Единственно возможная трудность – это отсутствие списка слов для тестирования. Список слов могу предоставить.
Abs62 wrote:Кажется это попахивает большим геморроем...

Мне кажется здесь нет геморроя, а просто расширение возможностей. Со стороны DICT-сервера нет никаких ограничений относительно контента. В ответ на команду OPTION MIME он может отдавать произвольный контент без ограничений с указанием его типа. Да, DICT-клиент (в данном случае я рассматриваю в качестве оного GoldenDict) действительно может не ожидать такого контента, который ему будет передан, но тогда его задача состоит в том, чтобы просто грамотно предупредить об этом пользователя. Вот примерный вид такого предупреждения, который в принципе GoldenDict уже умеет делать:
GoldenDict16.PNG
GoldenDict, версия 1.5.0-RC-293-g75ed194
GoldenDict16.PNG (16.07 KiB) Viewed 40792 times
Примерный текст сообщения для предупреждения: "Словарная статья содержит MIME-заголовок, который не поддерживается в GoldenDict". В дальнейшем по мере появления потребностей у пользователей список поддерживаемых MIME заголовков можно расширять. Но, если сейчас сделать так, что не будет поддерживаться даже вышеприведённый заголовок, а только такие словарные статьи, у которых отсутствует заголовок вообще, что равносильно заголовку:
Code: Select all
Content-type: text/plain; charset=utf-8
Content-transfer-encoding: 8bit

то это уже позволит удобно пользоваться консольным dict-клиентом dict в качестве внешней программы.
Last edited by Michael72 on Thu Jan 08, 2015 3:16 pm, edited 1 time in total.
Michael72
 
Posts: 180
Joined: Tue Mar 12, 2013 1:34 pm

Next

Return to Ошибки

Who is online

Users browsing this forum: No registered users and 2 guests