SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002870SAS.Планета[All Projects] Багpublic28-10-2015 09:1413-05-2016 07:20
Reportervdemidov 
Assigned Tozed 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionwon't fix 
PlatformOSOS Version
Product Version151010 
Target VersionFixed in Version 
Summary0002870: Тайлохранилище GoogleEarth не поддерживает юникодные пути
DescriptionТайлохранлище реализованное в TTileStorageGoogleEarth с использованием DLL не сможет работать с юникодными путями в юникодной версии, так как в DLL есть только функция поддерживающая AnsiString
TagsNo tags attached.
Attached Files

- Relationships
parent of 0002911resolvedvdemidov Добавить в ITileStorageTypeAbilities информацию о поддержке юникода в пути к тайлохранилищу 

-  Notes
(0016657)
zed (manager)
30-10-2015 10:36

Тут засада с LevelDB, у неё метод open определён как:

extern leveldb_t* leveldb_open(
    const leveldb_options_t* options,
    const char* name,
    char** errptr);

так что в name можно передать только ансишную строку.

Некоторые выкручиваются вот таким нехорошим способом, со сменой рабочей директории:

        if sys.platform.startswith('win'):
            # resolve unicode path problem on Windows
            old_cwd = os.path.abspath(u'.')
            relative_path = os.path.relpath(store_dir, state_dir)
            os.chdir(state_dir)
            self._db = self._leveldb(relative_path)
            os.chdir(old_cwd)
        else:
            self._db = self._leveldb(store_dir)

Стоит такое вкорячивать?
(0016659)
vdemidov (manager)
30-10-2015 10:58

И что оно совсем никак utf-8 не понимает? Странно.
(0016664)
zed (manager)
30-10-2015 11:40

Оно написано для *nix, а там как правило системная кодировка utf-8 и там всё работает через char. Для Windows же официального порта нету и гугловцам пофиг, как там что работает: Error when opening paths with unicode characters.

Хотя не понятно, почему такого порта нет, они ведь в любом случае собирают GoogleEarth под Windows и он эту либу юзает, хоть она и вкомпилена в него.

По-идее, можно пропатчить этот метод, чтобы он принимал на вход widestring:

leveldb_t* leveldb_open(
    const leveldb_options_t* options,
    const char* name,
    char** errptr) {
  DB* db;
  if (SaveError(errptr, DB::Open(options->rep, std::string(name), &db))) {
    return NULL;
  }
  leveldb_t* result = new leveldb_t;
  result->rep = db;
  return result;
}

И, соответственно, не забыть при сборке либы включить юникодные строки. Может быть поможет.
(0016666)
vdemidov (manager)
30-10-2015 11:50

Может тогда лучше пусть уж принимает в utf-8, раз уж все равно начинать патчить либу? Или отдельную функцию для открытия сделать?

- Users who viewed this issue
User List Anonymous (2679x), nnngrach (1x), kalakotkas (1x), zed (16x), vdemidov (20x)
Total Views 2717
Last View 23-11-2024 08:12

- Issue History
Date Modified Username Field Change
28-10-2015 09:14 vdemidov New Issue
28-10-2015 09:16 vdemidov Issue cloned: 0002871
28-10-2015 09:29 vdemidov Status new => assigned
28-10-2015 09:29 vdemidov Assigned To => zed
28-10-2015 09:29 vdemidov Target Version => 24xxxx
30-10-2015 10:36 zed Note Added: 0016657
30-10-2015 10:58 vdemidov Note Added: 0016659
30-10-2015 11:40 zed Note Added: 0016664
30-10-2015 11:50 vdemidov Note Added: 0016666
18-11-2015 10:14 vdemidov Relationship added parent of 0002911
11-05-2016 08:12 zed Status assigned => closed
11-05-2016 08:12 zed Resolution open => won't fix
13-05-2016 07:20 vdemidov Target Version 24xxxx =>



Copyright © 2007 - 2024 SAS.Planet Team