Строка состояния

Russian main discussion
  • Author
  • Message
GGS
Offline
Posts: 31
Joined: Fri Nov 12, 2010 12:05 pm

Post by GGS »

В AkelPad.ini имею строку:

Code: Select all

StatusUserFormat=0x%cH (%cd)
для показа кода символа в строке состояния.

Код символов от 0x00 по 0x7F отображается верно, а код символов с 0x80 по 0xFF какой-то странный.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

GGS
У меня все нормально. Код отображается юникодный (видимо ожидается, что код символов будет в ANSI). Посмотрите в HexSel, он отображает как ANSI, так и Unicode.

GGS
Offline
Posts: 31
Joined: Fri Nov 12, 2010 12:05 pm

Post by GGS »

Instructor
Текст в кодировке 1251
латинская "o" 0x6F. В строке состояния вижу: 0x006F (111)
русская "о" 0xEE. В строке состояния вижу: 0x043E (1086)
Повторяю, текст НЕ юникодный.
видимо ожидается, что код символов будет в ANSI
Да, а какой код нужно ожидать в НЕ юникодном формате текста.
Last edited by GGS on Sun May 08, 2011 6:34 pm, edited 1 time in total.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

GGS
Повторяю :) Код AkelPad'ом отображается юникодный, несмотря на то, что файл не юникодный (все файлы приводятся к юникоду при открытии).

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Instructor
Тогда надо добавить код символа в текущей кодировке.
Только юникод не убирайте. :)

GGS
Offline
Posts: 31
Joined: Fri Nov 12, 2010 12:05 pm

Post by GGS »

Instructor
Хочется видеть истинный код символа, тот который в файле, а не то как его выводит при открытии AkelPad.
%cH Шестнадцатиричный код текущего символа в верхнем регистре
Так написано в Справке, никаких упоминаний про юникодность всего, что выше 0x7F.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Хочется видеть истинный код символа, тот который в файле, а не то как его выводит при открытии AkelPad.
1. Ну для этого существуют бинарные редактора. Для них содержимое - последовательность байт. Для нас(для АР) содержимое файла - последовательность текстовых символов(в любом представлении, о котором договорилось сообщество, и если не ошибаюсь, то некоторые символы могут занимать вплоть до 16 байт).
2. Кто Вам сказал, что АР помнит каждый байт исходного открытого документа? Как уже сказал инструктор, весь текст хранится и обрабатывается АР в Юникоде.
Так что придется Вам мирится.
Так написано в Справке, никаких упоминаний про юникодность всего, что выше 0x7F.
А это по Вашему
латинская "o" 0x6F. В строке состояния вижу: 0x006F (111)
не Юникодность? Ничего о Юникодности >0x7F не сказано, потому что Юникодно всё(и уж давно пора привыкнуть, что в WindowsNT Юникодно всё по-умолчанию, как и в 99% современных ОС).

GGS
Offline
Posts: 31
Joined: Fri Nov 12, 2010 12:05 pm

Post by GGS »

FeyFre
весь текст хранится и обрабатывается АР в Юникоде
... и это правильно. Я ничего против, собственно, юникодности не имею.
Вы, вероятно, не поняли, что я говорю о статусной строке (%cH) и показе истинных кодов имеющихся в ANSI файлах при ANSI же режиме просмотра.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

GGS, я понял о чем Вы говорите. И это ничего не меняет. АР открыл файл, определил кодировку, прочитал текст, конвертнул его в Юникод и всё. Акел забыл как оно лежало в файле, он помнит только как это нужно положить, не более(в какой кодировке). И не факт что положит точно в том виде, в котором взял. И в Статус буде писаться тот код, о котором помнит Акел - Юникодный.

GGS
Offline
Posts: 31
Joined: Fri Nov 12, 2010 12:05 pm

Post by GGS »

FeyFre
И не факт что положит точно в том виде, в котором взял.
IMHO, в Статусе должна быть возможность видеть тот код, "который взял".
Вот пример Статуса (шесть последовательных кодов) из charmap.exe (Таблица символов):

Code: Select all

U+007D (0x7D)
U+007E (0x7E)

U+0402 (0x80)
U+0403 (0x81)
U+201A (0x82)
U+0453 (0x83)
U+201E (0x84)
Естественно, при ANSI просмотре я ожидаю увидеть правую колонку этого примера, а не "разнобой" как в левой. Или и то и другое, как в charmap.exe
Напрашивается введение параметров %cu/%cU в дополнение к %ch/%cH

P.S. FeyFre, я говорю что и для чего я вижу, а Вы мне о том почему я это вижу.
P.P.S. На этом заканчиваю, надеюсь Instructor понимает что я говорю. Решать ему.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

GGS
Есть одна проблема как отобразить Ansi. Например, UTF-8 файл буква "Б" Ansi код "\xD0\x91".

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Instructor wrote:GGS
Есть одна проблема как отобразить Ansi. Например, UTF-8 файл буква "Б" Ansi код "\xD0\x91".
Раз уж пошла такая пьянка ;) то можно было бы сделать так: показывать в строке статуса результат WideCharToMultiByte для кодировки текущего документа в качестве параметра UINT CodePage. Т.е. как раз "\xD0\x91" для "Б" в UTF-8, и один байт для ANSI.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

DV
А что делать с комбинированными символами? ЕМНИП, то в стандарте предусмотрено 6 дополнительных компонентов символа(всякие черточки и точечки по бокам символов). Например есть основной символ, и три черточки. Какой именно код нужно будет показать?

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

FeyFre wrote:Какой именно код нужно будет показать?
Код основного символа?
А вообще я с таким пока не сталкивался. Не так давно я был уверен, что максимальная длина символа составляет 3 байта [некоторые символы в UTF-8], пока не узнал о "суррогатных" символах, которые в UTF-8 представляются 4 байтами.
[more="http://ru.wikipedia.org/wiki/UTF-8"]Замечание: Символы, закодированные в UTF-8, могут быть длиной до шести байт, однако стандарт Unicode не определяет символов выше 0x10ffff, поэтому символы Unicode могут иметь максимальный размер в 4 байта в UTF-8.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

DV
UTF8 вообще-то по стандарту определенно и для 4-байтовых комбинаций(а технически рассчитано и для 6 байтовых), и это не суррогаты. Суррогаты - это когда глиф кодируется двумя кодам: основным символом и доп. элементами.
Код основного символа некорректно. Например для если буквы "Ё" представить только код "Е" без кода двух точек, то получается немного не то. Также для буквы "Ї" = І + двоеточие сверху.
Это нам то повезло. А в немецких языках: A U O против Ä Ö Ü и aeoiuy против áéóíúý - содержимое то меняется.