Страница 1 из 2

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

Добавлено: 27 мар 2009, 12:49
Elena_S
Нужны скрипт-конвертеры для перекодирования текстовых данных (кириллица) из DOS-866 (поддерживаемых Excel) в WIN-1251 (поддерживающихся ArcGIS)

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

Добавлено: 27 мар 2009, 13:45
Denis Rykov
Попробуйте этот.

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

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

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

Добавлено: 29 мар 2009, 15:48
AN1440
...только если это DBF-файл - заголовок в покое оставить.

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

Добавлено: 30 мар 2009, 10:27
Elena_S
спасибо, воспользуюсь

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 03 июл 2009, 09:45
Jerry
Исходно дано:
1. Windows XP Pro SP3 Rus
2. ArcGIS 9.2 SP6
3. dbf. файл

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

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

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

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

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

Короче выкладывайте файл или отправляйте на мыло.

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

Добавлено: 03 июл 2009, 09:58
Jerry
Собственно файл.
Буду признателен за любую помощь

При попытке скормить его питовскому скрипту из темы, указанной выше, при
варианте 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

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

Добавлено: 05 июл 2009, 07:09
bim2010
У меня результат перекодировки отрицательный.
Пробовал по 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 ничего не даст.

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

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