Этот сценарий отлично выглядит в средстве просмотра dbf, но OpenOffice Calc по умолчанию использует набор символов Западной Европы (DOS/OS2-850 International). При открытии символы, отличные от ASCII, неверны. Когда используется набор символов Западной Европы (Windows-1252/WinLatin 1), он выглядит отлично. MS Access 2000 интерпретирует как DOS 850. У меня отсутствует параметр или параметр где-нибудь?Рабочий сценарий python делает dbf, который интерпретируется как cp850 вместо cp1252 с помощью OpenOffice Calc
import sys, os.path, string
import dbf as dbfpp
print 'stdin:', sys.stdin.encoding, 'stdout:', sys.stdout.encoding # cp437 both if run in win cmd.exe, None, utf-8 in pywin
def main():
flddef = 'SITE_CODE N(19,6);HW_CODE C(13);PROGRAM C(10);SITE_NAME C(85);START_DATE D;DESCRIPT M;ACRES N(19,6);'
dbffile = 'X:/Import/ny/esrd/esrd2015test_ny/outdbf/test.dbf'
if os.path.isfile(dbffile):
os.remove(dbffile)
dbfmake = dbfpp.Table(
dbffile,
flddef,
codepage='cp1252',
on_disk=True,
)
dbfmake.open()
print dbfmake.codepage # cp1252 (Windows ANSI)
descvalinit = 'The site was on Cayuga Lake ¼ mile from shore (these non-gremlins): µ©®æ§. A gremlin phrase:“only perch”.'
print 'descvalinit in list:', [descvalinit] # ['The site was on Cayuga Lake \xbc mile from shore (these non-gremlins): \xb5\xa9\xae\xe6\xa7. A gremlin phrase:\x93only perch\x94.']
descval = unicode(descvalinit, '1252')
print 'descval in list:', [descval] # [u'The site was on Cayuga Lake \xbc mile from shore (these non-gremlins): \xb5\xa9\xae\xe6\xa7. A gremlin phrase:\u201conly perch\u201d.']
datum = (33567.000000, '100000B ', 'HW', 'Fishing spot', None, descval, 18)
print 'datum:', datum # (33567.0, '100000B ', 'HW', 'Fishing spot', None, u'The site was on Cayuga Lake \xbc mile from shore (these non-gremlins): \xb5\xa9\xae\xe6\xa7. A gremlin phrase:\u201conly perch\u201d.', 18)
dbfmake.append(datum)
dbfmake.close()
if __name__ == "__main__":
main()
Использование Python 2.7.3 32 бит на Windows 7 x64
Ни один из файлов не изменил поведение для Calc или Access. BTW Я упомянул Calc, потому что я думал, что он продемонстрировал проблему с кодировкой. Мне очень важно получить данные в MS Access. –
Возможно, вы захотите конвертировать в csv и импортировать это; проверьте [мой ответ здесь] (http://stackoverflow.com/a/32772924/208880). –
Данные начинаются как csv, слегка редактируются программно и загружаются в таблицу postgres, поэтому я мог бы, вероятно, получить ее в Access оттуда. Был надежен иметь один dbf, который могла бы прочитать устаревшая программа ГИС и Access. –