View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000978 | Far Manager | Viewer | public | 2009-07-23 14:58 | 2009-10-20 21:09 |
Reporter | snaury | Assigned To | DrKnS | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0000978: Какие-то неотображаемые символы "съедают" текст при просмотре в UTF-16 | ||||
Description | Раньше (до второй версии) часто использовал Far для поиска юникод текста (и их оффсетов) в экзешниках. Однако вторая версия натыкается на какие-то символы, которые корёжат консоль и мешают перерисовывать экран на данной строке (я не совсем понял, но возможно это либо 0xFFFF либо 0x7FFF), при этом чаще всего это даже не сразу замечаешь (большинство [не]текста - всё равно вопросиками, а неперисованные куски становятся явно видны только при двойном нажатии на Ctrl+O). Смотрите скриншоты, может быть станет понятнее: http://kitsu.ru/20090723-utf16-display-1.png http://kitsu.ru/20090723-utf16-display-2.png К сожалению натыкаюсь на такое практически постоянно, может быть можно отыскать который из юникод-символов так обрубает отрисовку строки и принудительно заменять его на вопросик? | ||||
Additional Information | Тестировалось на билде 1053 | ||||
Tags | No tags attached. | ||||
Build | 1163 | ||||
2009-07-23 14:58
|
|
2009-07-23 14:58
|
|
|
Все натыкаются. Этот нехороший символ - 0xFFFF. Функции семейства sprintf (в майкрософтовской реализации) на нём прерывают свою работу. И это как бы даже документированное поведение. Что с этим делать - истреблять sprintf или заменить его какой-то своей реализацией - хз. |
|
DrKnS, а версия, скомпиленная в gcc как себя ведет? |
|
GCC линкует с msvcrt так что точно также должен. |
|
Хм... при сборке под VS2008SP1 что то я не вижу проблем. То ли всё ок, то ли я чего то не понимаю. Объясните на пальцах и со скриншотами как оно не должно выглядеть, а как должно. |
|
Всё... ступил... теперь вижу. |
|
Вот так работает? : Viewer::ShowHex() { ... wcscat(OutStr,TextStr); + for(size_t I=0; I < wcslen (OutStr); ++I) + if(OutStr[I] == (wchar_t)0xFFFF) + OutStr[I]=L'?'; + if (StrLength(OutStr)>HexLeftPos) mprintf(L"%-*.*s",ObjWidth,ObjWidth,OutStr+(int)HexLeftPos); ... } |
|
> GCC линкует с msvcrt так что точно также должен. Он может и должен, но почему-то там всё нормально. > Вот так работает? Валя, тут надо не костылём, а глобально править, т.к. проблема везде - в панелях, диалогах, редакторе и т. п. |
|
Про костыли согласен, а это значит для M$ нужно переписывать эту чертову функцию. |
|
1163 |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-07-23 14:58 | snaury | New Issue | |
2009-07-23 14:58 | snaury | File Added: 20090723-utf16-display-1.png | |
2009-07-23 14:58 | snaury | File Added: 20090723-utf16-display-2.png | |
2009-07-23 16:31 | DrKnS | Note Added: 0003780 | |
2009-07-24 09:00 | vskirdin | Note Added: 0003781 | |
2009-07-24 10:13 | alexy | Note Added: 0003782 | |
2009-07-24 10:41 | DiRTy_GaRRy | Note Added: 0003783 | |
2009-07-24 10:51 | DiRTy_GaRRy | Note Added: 0003785 | |
2009-07-24 12:27 | vskirdin | Note Added: 0003786 | |
2009-07-24 16:16 | DrKnS | Note Added: 0003789 | |
2009-07-25 09:36 | vskirdin | Note Added: 0003790 | |
2009-10-13 20:30 | DrKnS | Relationship added | duplicate of 0000789 |
2009-10-13 20:35 | DrKnS | Status | new => assigned |
2009-10-13 20:35 | DrKnS | Assigned To | => DrKnS |
2009-10-13 20:36 | DrKnS | Note Added: 0004248 | |
2009-10-13 20:36 | DrKnS | Status | assigned => feedback |
2009-10-20 21:09 | DrKnS | Build | => 1163 |
2009-10-20 21:09 | DrKnS | Status | feedback => closed |
2009-10-20 21:09 | DrKnS | Resolution | open => fixed |
2009-10-20 21:09 | DrKnS | Fixed in Version | => 2.0 |