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

Нет поддержки Unicode в именах папок и файлов

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

Нет поддержки Unicode в именах папок и файлов

Postby Vvz » Wed Sep 07, 2011 4:37 am

В программе нет поддержки Unicode имен папок и файлов

В результате ,
1) программа не работает, если имя пользователя (папки профиля) на языке отличном от языка указанного для поддержки не-Unicode программ в панели управления
2) программа не распознаёт файлы (словарей, ресурсов, файлы озвучат слов) если также имеют язык отличный от указанного в панели управления
Vvz
 
Posts: 13
Joined: Wed Sep 07, 2011 4:30 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby ikm » Wed Sep 07, 2011 5:00 am

Это потому, что часть кода использует стандартный fopen(), который работает только с 8-битными именами файлов. Решение тут только одно - переделать :) Но некому и некогда. А в Microsoft, кстати, не додумались до utf-8 для не-Unicode программ?
ikm
Автор GoldenDict
 
Posts: 1592
Joined: Wed Feb 04, 2009 10:40 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby Vvz » Wed Sep 07, 2011 9:45 am

Пишут, что можно попробовать сделать так:
We has a similar problem too. Luckily there's a solution, though it's kinda tricky.
If the file/directory already exists - you may use the GetShortPathName function. The resulting "short" path name is guaranteed not to contain non-latin characters.
1. Call GetShortPathNameW (unicode version) to get the "short" path string.
2. Convert the short path into the ANSI string (use WideCharToMultiByte).
3. Give the resulting ANSI string to the stupid 3rd-party lib.
Now, if the file/directory doesn't exist yet - you may not obtain its short pathname. In such a case you should create it first.



Вам, не кажется, что фраза очень странно звучит? ;) UTF = Unicode формат
ikm wrote:\А в Microsoft, кстати, не додумались до utf-8 для не-Unicode программ?
Vvz
 
Posts: 13
Joined: Wed Sep 07, 2011 4:30 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby Abs62 » Wed Sep 07, 2011 4:03 pm

Пора на хранение имён файлов в UTF-8 переходить. В Linux/MacOS fopen вроде как нативно с этой кодировкой работает, под Win можно сделать обёртку с переходом на _wfopen.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby Tvangeste » Wed Sep 07, 2011 4:06 pm

Ну и до кучи:

* https://github.com/goldendict/goldendict/issues/30 -- GoldenDict can't handle certain dictionary filenames
* https://github.com/goldendict/goldendict/issues/43 -- Doesn't play audiofiles in Unicode filename
Tvangeste
 
Posts: 893
Joined: Thu Jun 02, 2011 11:42 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby Abs62 » Wed Sep 07, 2011 10:27 pm

Пора на хранение имён файлов в UTF-8 переходить.

Первый результат можно посмотреть на GitHub в этой ветке.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby ikm » Thu Sep 08, 2011 2:35 am

Abs62: Хороший подход! Но есть один важный момент. В unix-системах совершенно не факт, что кодировка имен файлов - всегда utf8. Кто-то до сих пор использует koi8-r, например. Поэтому:

  • Давайте считать, что 8-битная кодировка для имен файлов в Windows - всегда utf-8.
  • Однако во всех остальных системах мы продолжаем использовать их родную 8-битную кодировку.
Таким образом, заменять вызовы QString::fromLocal8Bit()/toLocal8Bit() надо не на QString::fromUtf8()/toUtf8(), а на FsEncoding::encode()/decode(). Можно туда добавить версии для QString. Уже внутри реализации этих encode()/decode() надо делать условную компиляцию (для Windows - utf8, для всех остальных - то, что там было и раньше).
ikm
Автор GoldenDict
 
Posts: 1592
Joined: Wed Feb 04, 2009 10:40 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby Abs62 » Thu Sep 08, 2011 5:17 am

ikm wrote:
  • Давайте считать, что 8-битная кодировка для имен файлов в Windows - всегда utf-8.
  • Однако во всех остальных системах мы продолжаем использовать их родную 8-битную кодировку.

Я только не понял, откуда эту родную кодировку брать? Поиск файлов же идёт через QDir, а QDir и QFileInfo отдают QString, то бишь там уже юникод.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby ikm » Thu Sep 08, 2011 7:25 am

В чем конкретно проблема? Для преобразования между QString и локальной 8-битной кодировкой можно использовать QString::fromLocal8Bit()/toLocal8Bit().
ikm
Автор GoldenDict
 
Posts: 1592
Joined: Wed Feb 04, 2009 10:40 am

Re: Нет поддержки Unicode в именах папок и файлов

Postby Abs62 » Thu Sep 08, 2011 4:53 pm

А QString::toLocal8Bit() и в UTF-8 преобразует, если она системная? Тогда проблем нет.
Сделал. Результат там же.
Abs62
 
Posts: 631
Joined: Mon Jun 14, 2010 11:51 am

Next

Return to Ошибки

Who is online

Users browsing this forum: No registered users and 16 guests