Page 1 of 2
Posted: Sun May 08, 2011 2:20 pm
by GGS
В AkelPad.ini имею строку:
для показа кода символа в строке состояния.
Код символов от 0x00 по 0x7F отображается верно, а код символов с 0x80 по 0xFF какой-то странный.
Posted: Sun May 08, 2011 3:57 pm
by Instructor
GGS
У меня все нормально. Код отображается юникодный (видимо ожидается, что код символов будет в ANSI). Посмотрите в HexSel, он отображает как ANSI, так и Unicode.
Posted: Sun May 08, 2011 6:20 pm
by GGS
Instructor
Текст в кодировке 1251
латинская "o" 0x6F. В строке состояния вижу: 0x006F (111)
русская "о" 0xEE. В строке состояния вижу: 0x043E (1086)
Повторяю, текст НЕ юникодный.
видимо ожидается, что код символов будет в ANSI
Да, а какой код нужно ожидать в НЕ юникодном формате текста.
Posted: Sun May 08, 2011 6:31 pm
by Instructor
GGS
Повторяю

Код AkelPad'ом отображается юникодный, несмотря на то, что файл не юникодный (все файлы приводятся к юникоду при открытии).
Posted: Sun May 08, 2011 6:36 pm
by Infocatcher
Instructor
Тогда надо добавить код символа в текущей кодировке.
Только юникод не убирайте.

Posted: Sun May 08, 2011 6:38 pm
by GGS
Instructor
Хочется видеть истинный код символа, тот который в файле, а не то как его выводит при открытии AkelPad.
%cH Шестнадцатиричный код текущего символа в верхнем регистре
Так написано в Справке, никаких упоминаний про юникодность всего, что выше 0x7F.
Posted: Sun May 08, 2011 7:07 pm
by FeyFre
Хочется видеть истинный код символа, тот который в файле, а не то как его выводит при открытии AkelPad.
1. Ну для этого существуют бинарные редактора. Для них содержимое - последовательность байт. Для нас(для АР) содержимое файла - последовательность текстовых символов(в любом представлении, о котором договорилось сообщество, и если не ошибаюсь, то некоторые символы могут занимать вплоть до 16 байт).
2. Кто Вам сказал, что АР помнит каждый байт исходного открытого документа? Как уже сказал инструктор, весь текст хранится и обрабатывается АР в Юникоде.
Так что придется Вам мирится.
Так написано в Справке, никаких упоминаний про юникодность всего, что выше 0x7F.
А это по Вашему
латинская "o" 0x6F. В строке состояния вижу: 0x006F (111)
не Юникодность? Ничего о Юникодности >0x7F не сказано, потому что Юникодно всё(и уж давно пора привыкнуть, что в WindowsNT Юникодно всё по-умолчанию, как и в 99% современных ОС).
Posted: Sun May 08, 2011 8:53 pm
by GGS
FeyFre
весь текст хранится и обрабатывается АР в Юникоде
... и это правильно. Я ничего против, собственно, юникодности не имею.
Вы, вероятно, не поняли, что я говорю о статусной строке (%cH) и
показе истинных кодов имеющихся в ANSI файлах при ANSI же режиме просмотра.
Posted: Sun May 08, 2011 10:00 pm
by FeyFre
GGS, я понял о чем Вы говорите. И это ничего не меняет. АР открыл файл, определил кодировку, прочитал текст, конвертнул его в Юникод и всё. Акел забыл как оно лежало в файле, он помнит только как это нужно положить, не более(в какой кодировке). И не факт что положит точно в том виде, в котором взял. И в Статус буде писаться тот код, о котором помнит Акел - Юникодный.
Posted: Mon May 09, 2011 4:13 am
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 понимает что я говорю. Решать ему.
Posted: Mon May 09, 2011 5:11 am
by Instructor
GGS
Есть одна проблема как отобразить Ansi. Например, UTF-8 файл буква "Б" Ansi код "\xD0\x91".
Posted: Mon May 09, 2011 1:41 pm
by DV
Instructor wrote:GGS
Есть одна проблема как отобразить Ansi. Например, UTF-8 файл буква "Б" Ansi код "\xD0\x91".
Раз уж пошла такая пьянка

то можно было бы сделать так: показывать в строке статуса результат
WideCharToMultiByte для кодировки текущего документа в качестве параметра
UINT CodePage. Т.е. как раз "\xD0\x91" для "Б" в UTF-8, и один байт для ANSI.
Posted: Mon May 09, 2011 2:05 pm
by FeyFre
DV
А что делать с комбинированными символами? ЕМНИП, то в стандарте предусмотрено 6 дополнительных компонентов символа(всякие черточки и точечки по бокам символов). Например есть основной символ, и три черточки. Какой именно код нужно будет показать?
Posted: Mon May 09, 2011 5:27 pm
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.
Posted: Mon May 09, 2011 6:09 pm
by FeyFre
DV
UTF8 вообще-то по стандарту определенно и для 4-байтовых комбинаций(а технически рассчитано и для 6 байтовых), и это не суррогаты. Суррогаты - это когда глиф кодируется двумя кодам: основным символом и доп. элементами.
Код основного символа некорректно. Например для если буквы "Ё" представить только код "Е" без кода двух точек, то получается немного не то. Также для буквы "Ї" = І + двоеточие сверху.
Это нам то повезло. А в немецких языках: A U O против Ä Ö Ü и aeoiuy против áéóíúý - содержимое то меняется.