Конвертер из DOS-866 в WIN-1251

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Elena_S
Новоприбывший
Сообщения: 10
Зарегистрирован: 27 мар 2009, 12:10
Репутация: 0

Конвертер из DOS-866 в WIN-1251

Сообщение Elena_S » 27 мар 2009, 12:49

Нужны скрипт-конвертеры для перекодирования текстовых данных (кириллица) из DOS-866 (поддерживаемых Excel) в WIN-1251 (поддерживающихся ArcGIS)

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Скрипт-конвертеры

Сообщение Denis Rykov » 27 мар 2009, 13:45

Попробуйте этот.
Вложения
doswin.rar
(32.47 КБ) 3304 скачивания
Spatial is now, more than ever, just another column- The Geometry Column.

AN1440
Участник
Сообщения: 76
Зарегистрирован: 24 фев 2006, 14:33
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение AN1440 » 29 мар 2009, 15:46

ФАРом можно: открываешь файл на редактирование в одной кодировке, выделить всё, вырезать (Ctrl-X), переключить кодировку, вставить (Ctrl-V), сохранить.

AN1440
Участник
Сообщения: 76
Зарегистрирован: 24 фев 2006, 14:33
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение AN1440 » 29 мар 2009, 15:48

...только если это DBF-файл - заголовок в покое оставить.

Elena_S
Новоприбывший
Сообщения: 10
Зарегистрирован: 27 мар 2009, 12:10
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение Elena_S » 30 мар 2009, 10:27

спасибо, воспользуюсь

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

Re: Конвертер из DOS-866 в WIN-1251

Сообщение geologic » 30 мар 2009, 11:40

Если вы работаете с шейп-файлами, и это именно их вы собираетесь перекодировать, то это не нужно. ГИС умеют работать с разными кодировками, в том числе, и в тандеме с Эксель. мало того, ГИС сами могут служить таким конвертором - если файл (таблица) единожды правильно открылся в ARcView или ArcMap, далее можно его записать в любой кодировке, какая вам подходит для Экселя или чего-либо еще. Читайте хелп по словам "Code page".

Подробнее работа с кодовыми таблицами описана здесь. Там же есть и более простое изложение, для начинающих.

Elena_S
Новоприбывший
Сообщения: 10
Зарегистрирован: 27 мар 2009, 12:10
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение Elena_S » 30 мар 2009, 15:15

Спасибо, "geologic". Я теперь делаю так: сохраняю файл xls, нахожу его в ArcCatalog, правой кнопкой мыши щелкаю, Экспорт - dBase (единичн.)..., указываю место выходной таблицы dbf - ВСЁ! нормальная таблица готова, без всяких искажений кириллицы. Здесь все уже предусмотрено и не надо в Экселе сохранять файл, как dBaseIV.
А если есть табилца dbf, а её нужно отправить в Эксель, то через Опции в том же ArcCatalog сохраняю файл, как текстовый. Он нормально открывается в Эксель, причем удобно, что можно там же, перед открытием выбрать формат файла и символ-разделитель. Таблица тоже не искажается. (примерно это и написано было в ссылке, на кот. Вы мне указали).

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

Re: Конвертер из DOS-866 в WIN-1251

Сообщение geologic » 30 мар 2009, 16:14

Кириллица не искажается и в Экселе, просто тот не умеет правильно указать Code Page при записи. Раньше умел когда-то, теперь разучился. В результате dbf идет c Codepage=0, и Arc его открывает неправильно. Можно просто Code байт править, можно каталог для обмена объявить как DOS866, чтоб без лишних перегонок, вариантов много. Если туда-сюда гоняете, лучше всего через Access или ODBC соединить свой эксель, но когда много файлов, это неудобно, ясное дело.

Jerry
Новоприбывший
Сообщения: 11
Зарегистрирован: 24 дек 2008, 21:53
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение Jerry » 03 июл 2009, 08:29

Хм... возник вопрос ребром..
Есть dbf файл с атрибутикой на речную сеть. Названия рек сурово покорёжены...
Пробовал всё: и менять 29 байт, и в реестр и алл зе рест...
Результат нулевой...
Можно что-либо сделать?
Готов лаже отправить сей фал по почте, может кто сможет помочь...
Заранее спасибо.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Конвертер из DOS-866 в WIN-1251

Сообщение KolesovDmitry » 03 июл 2009, 09:18

Jerry писал(а): Есть dbf файл с атрибутикой на речную сеть. Названия рек сурово покорёжены...
Не очень понятно, что значит сурово покорежены. Если дело просто в кодировке, то решается легко, аналогичная тема была тут.
Если дело не в кодировке, то слишком мало информации в описании проблемы.

Jerry
Новоприбывший
Сообщения: 11
Зарегистрирован: 24 дек 2008, 21:53
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение Jerry » 03 июл 2009, 09:45

Исходно дано:
1. Windows XP Pro SP3 Rus
2. ArcGIS 9.2 SP6
3. dbf. файл

Вот так выглядит типовое название реки если использовать разные кодировки (смотрю через программу CDBF)

?рфRч?c ANSI
?°ЄRі?c OEM

Т.е. кодировку то он меняет. Проблема в том, что ни ANSI ни OEM не приводят к результату.

bim2010
Гуру
Сообщения: 977
Зарегистрирован: 27 янв 2009, 22:57
Репутация: 258

Re: Конвертер из DOS-866 в WIN-1251

Сообщение bim2010 » 03 июл 2009, 09:54

Тут несколько вариантов:
1. Битый файл
- восстанавливается старинными программами типа foxbase или утилита восстановления dbf в norton comander.
2. Вариант кодировки не 1251, и не 866 а например utf8
- для этого использую visual foxpro 9.0 он поддерживает около 20 типов кодировок

Короче выкладывайте файл или отправляйте на мыло.
Последний раз редактировалось bim2010 03 июл 2009, 09:58, всего редактировалось 1 раз.

Jerry
Новоприбывший
Сообщения: 11
Зарегистрирован: 24 дек 2008, 21:53
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение Jerry » 03 июл 2009, 09:58

Собственно файл.
Буду признателен за любую помощь

При попытке скормить его питовскому скрипту из темы, указанной выше, при
варианте win1251 -> UTF рабоатет, но итог всё равно крякозярбы
А наоборот -- вываливается с ошибкой:

Код: Выделить всё

Traceback (most recent call last):
  File "C:\Python24\conv.py", line 18, in ?
    f=unicode(f,'utf-8')
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 1-4: invalid data
Вложения
hydro_l.rar
5 мегабайт радости;)
(4.95 МБ) 864 скачивания

bim2010
Гуру
Сообщения: 977
Зарегистрирован: 27 янв 2009, 22:57
Репутация: 258

Re: Конвертер из DOS-866 в WIN-1251

Сообщение bim2010 » 05 июл 2009, 07:09

У меня результат перекодировки отрицательный.
Пробовал по XP и linux. База не битая, но и не отображается корректно.
Кроме кодовой страницы другой важный параметр locale
Смотрим MSDN:

Код: Выделить всё

Converts character expressions between single-byte, double-byte, UNICODE, and locale-specific representations.

STRCONV(cExpression, nConversionSetting [, nRegionalIdentifier [, nRegionalIDType]])
Parameters
cExpression 
Specifies the character expression that STRCONV( ) converts. 
nConversionSetting 
Specifies the type of conversion. The following table lists the values of nConversionSetting and the type of conversion performed. 
nConversionSetting 	Conversion 
1	Converts single-byte characters in cExpression to double-byte characters.
Supported for Locale ID only (specified with the nRegionalIdentifier or nRegionalIDType parameters).
2	Converts double-byte characters in cExpression to single-byte characters. 
Supported for Locale ID only (specified with the nRegionalIdentifier or nRegionalIDType parameters).
3	Converts double-byte Katakana characters in cExpression to double-byte Hiragana characters. 
Supported for Locale ID only (specified with the nRegionalIdentifier or nRegionalIDType parameters).
4	Converts double-byte Hiragana characters in cExpression to double-byte Katakana characters. 
Supported for Locale ID only (specified with the nRegionalIdentifier or nRegionalIDType parameters).
5	Converts double-byte characters to UNICODE (wide characters).
6	Converts UNICODE (wide characters) to double-byte characters.
7	Converts cExpression to locale-specific lowercase. 
Supported for Locale ID only (specified with the nRegionalIdentifier or nRegionalIDType parameters).
8	Converts cExpression to locale-specific uppercase. 
Supported for Locale ID only (specified with the nRegionalIdentifier or nRegionalIDType parameters).
9	Converts double-byte characters in cExpression to UTF-8
10	Converts Unicode characters in cExpression to UTF-8
11	Converts UTF-8 characters in cExpression to double-byte characters.
12	Converts UTF-8 characters in cExpression to UNICODE characters.
13	Converts single-byte characters in cExpression to encoded base64 binary.
14	Converts base64 encoded data in cExpression to original unencoded data.
15	Converts single-byte characters in cExpression to encoded hexBinary.
16	Converts single-byte characters in cExpression to decoded hexBinary.
nRegionalIdentifier 
Specifies the Locale ID, code page, or FontCharSet value to use for the conversion. If nRegionalIDType is omitted, the Locale ID is used for the conversion. If nRegionalIdentifier is omitted, the system locale ID is used by default. If nRegionalIdentifier is invalid or not supported on the machine, the error "Invalid locale ID" is generated. 
nRegionalIdentifier 	Language 
1029	Czech
1031	German
1033	English (Default)
1034	Spanish
1036	French
1040	Italian
1045	Polish
1046	Portuguese (Brazil)
2070	Portuguese (Portugal)
nRegionalIDType 
Specifies if a Locale ID, code page, or FontCharSet is used for the conversion. The nRegionalIdentifier parameter, described above, is used to specify the actual Locale ID, code page, or FontCharSet used for the conversion. 
nRegionalIDType 	Description 
0	(Default) Specifies that the nRegionalIdentifier parameter is a Locale ID value.
1	Specifies that nRegionalIdentifier is a code page value.
2	Specifies that nRegionalIdentifier is a FontCharSet value.
Return Value
Character data type. STRCONV( ) returns the converted character expression.
Я проверял только на locale 1049 - Россия. Чтобы копать дальше, надо знать страну - источник данных и их locale. Хотя я могу и ошибаться, и данные просто защищены - тогда перебор locale ничего не даст.

Jerry
Новоприбывший
Сообщения: 11
Зарегистрирован: 24 дек 2008, 21:53
Репутация: 0

Re: Конвертер из DOS-866 в WIN-1251

Сообщение Jerry » 07 июл 2009, 10:10

истоник данных неизвестен...
подозреваю, что всё таки Россия...
скорее всего сама база создавалась ещё во времена ArcView

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя