Проблемы с UTF-7 (65000)

Здесь можно сообщить о найденных багах в Far.
User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 14:46

Если открыть в редакторе файл (в однобайтной кодировке, или UTF-8), то с помощью Shift-F8 можно сменить входную кодировку на UTF-7.

- если в файле есть кириллица, то она "испортится", необратимо (обратное переключение не поможет)
- если переключить в исходную кодировку, то все символы не входящие в ASCII "испортятся" (будет отображаться как будто файл в UTF-7, см. например символы ={"; и т.п.).

Вроде бы попадалась информация, что UTF-7 поддерживается в фаре не полноценно, но не ожидал что до такой степени.
Столкнулся при разборе дистрибутивного макроса, циклически переключаещего кодировки в редакторе: http://forum.farmanager.com/viewtopic.p ... 36#p119636

P.S.
Что интересно: в списке кодировок вьювера отсутствует UTF-7

2useven10
Posts: 3762
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 148 times

Re: Проблемы с UTF-7 (65000)

Post by 2useven10 » Tue 10 Jun, 2014 15:34

Это точно баг.
Как минимум должно быть предупреждение об ошибке перекодировки текста с кирилицей в UTF-7.
В фар2 UTF-7 по Shift-F8 серая, может это правильно...

User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 15:43

2useven10 wrote:Как минимум должно быть предупреждение об ошибке перекодировки текста с кирилицей в UTF-7.
Я не специалист, но из википедии следует что в UTF-7 один и тот же символ можно представить по-разному.
Возможно символы с кодами, соответствующими кириллице (в OEM или ANSI) тоже имеют смысл в UTF-7.

2useven10
Posts: 3762
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 4 times
Been thanked: 148 times

Re: Проблемы с UTF-7 (65000)

Post by 2useven10 » Tue 10 Jun, 2014 15:52

-7 значит 7-битная, один в один вообще кодируются только 62 символа.

User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 17:06

Помимо этих 62 есть ещё "optional direct characters": contains all other printable characters in the range U+0020–U+007E except ~ \ + and space.
Но да, кириллица явно за пределами 7e.
Интересно как другие приложения обрабатывают эту ситуацию.

User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 17:23

2useven10 wrote:В фар2 UTF-7 по Shift-F8 серая, может это правильно...
Это сейчас единственный правильный путь.
До тех пор, пока не появится 0002684: Возможность смены кодировки путём перечитывания файла.

Но почему во вьювере нет UTF-7? Там проблем не было бы.

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: Проблемы с UTF-7 (65000)

Post by zg » Tue 10 Jun, 2014 18:03

John Doe wrote:попадалась информация, что UTF-7 поддерживается в фаре не полноценно, но не ожидал что до такой степени.
поясните это своё высказывание. в фаре для utf7 не поддерживается только обработка ошибок конвертирования. т.е. грубо говоря одна единственная фича. т.е. до поддержки, аналогичной другим кодировкам — один шаг. т.е. большая, но при этом неполноценная поддержка — невозможна. при этом выражение «до такой степени» подразумевает обратное.

проверка отключена специально по неизвестным мне причинам. попробуйте включите, может всё нормально заработает.
// при CP_UTF7 dwFlags должен быть 0, см. MSDN
в мсдн я этого не нашёл, но по факту, да, если указать MB_ERR_INVALID_CHARS в любом случае возвращается ERROR_INVALID_FLAGS.

User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 18:15

zg wrote:поясните это своё высказывание.
До сегодняшнего дня я не вникал что вообще такое UTF-7, но слышал, что не всё в фаре с ней хорошо. Посредством выражения "до такой степени" я выразил своё удивление по поводу того, как легко огрести проблем, используя штатный макрос.
zg wrote:в фаре для utf7 не поддерживается только обработка ошибок конвертирования. т.е. грубо говоря одна единственная фича. т.е. до поддержки, аналогичной другим кодировкам — один шаг. т.е. большая, но при этом неполноценная поддержка — невозможна.
Даже если ошибки конвертирования будут обрабатываться, это не устранит описанную мной проблему при попытке переключиться обратно из UTF-7.

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: Проблемы с UTF-7 (65000)

Post by zg » Tue 10 Jun, 2014 18:16

John Doe wrote:Даже если ошибки конвертирования будут обрабатываться, это не устранит описанную мной проблему при попытке переключиться обратно из UTF-7.
а причём здесь утф7? это будет с любой другой кодировкой.

User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 19:32

С любой - не будет.
Проблема в том, что множество общеупотребительных символов (таких как знаки пунктуации) в UTF-7 допустимы в разных формах, что ведёт к утрате обратимости преобразования кодировки.

Возьмём для примера файл в Ansi, содержащий единственный символ !, переключимся в UTF-7 и обратно, получим +ACE-.

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: Проблемы с UTF-7 (65000)

Post by zg » Tue 10 Jun, 2014 20:03

John Doe wrote:С любой - не будет.
1251, русский текст, 932.

User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 20:16

Я не утвержал, что проблемы могут быть только с UTF-7.

Но что касается 1251/932, то не смог воспроизвести.
Беру йцукен в 1251, конвертирую в 932 и обратно. Всё обратилось.
Беру длинный текст, пытаюсь конвертировать в 932, но получаю предупреждение.

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: Проблемы с UTF-7 (65000)

Post by zg » Tue 10 Jun, 2014 20:43

John Doe wrote:Но что касается 1251/932, то не смог воспроизвести.

Беру длинный текст, пытаюсь конвертировать в 932, но получаю предупреждение.
как бы противоречие.

User avatar
cmd.exe
Posts: 364
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 179 times
Been thanked: 5 times
Contact:

Re: Проблемы с UTF-7 (65000)

Post by cmd.exe » Tue 10 Jun, 2014 20:59



Фар в одну сторону умеет а вот обратно в ansi для него проблема, хотя так не должно быть. И особо сложных манипуляций там нет.
Про 1251/932 мне неудалось воспроизвести.
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates

User avatar
zg
zero-gravity
Posts: 5540
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 85 times
Contact:

Re: Проблемы с UTF-7 (65000)

Post by zg » Tue 10 Jun, 2014 21:22

cmd.exe wrote:Фар в одну сторону умеет а вот обратно в ansi для него проблема, хотя так не должно быть.
проблемы нет.

User avatar
John Doe
Бюрократ
Posts: 12204
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 32 times
Been thanked: 162 times

Re: Проблемы с UTF-7 (65000)

Post by John Doe » Tue 10 Jun, 2014 21:33

zg wrote:
John Doe wrote:...но получаю предупреждение.
как бы противоречие.
Фар тут не даёт совершить деструктивную операцию.
А в обсуждаемом случае с UTF-7 всё ровно наоборот.

Post Reply

Return to “Глюки и баги”