我刚开始在Mac上开发新工作,但我们的服务器是Windows服务器。所以我已经在那里迁移了我的新代码(在Mac上运行正常),突然之间我得到了这个回溯:
Traceback (most recent call last):
File ".\jira_oauth.py", line 260, in <module>
writer.writerow(fields)
File "C:\Anaconda3\lib\csv.py", line 153, in writerow
return self.writer.writerow(self._dict_to_list(rowdict))
File "C:\Anaconda3\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 1368-1369: character maps to <undefined>
我会在我的代码中发布导致它的行:
for cycle in range(pulls):
# for cycle in range(pulls):
logging.info('On cycle: {}'.format(cycle))
data_url = DATA_URL + mk_data_endpoint(max_res, start_at)
logging.info('Max Results: {} - Starting Point: {}'.format(
max_res, start_at
))
# Pull down data and transform into dictionary
data = json.loads(o.get_data(data_url).decode('utf-8'))
for issue in data['issues']:
fields = issue['fields']
fields['id'] = issue['id']
fields['key'] = issue['key']
clean_data(fields)
split_entries(fields, 'project', 'project_key', 'project_name')
fields_keys = list(fields.keys())
for key in fields_keys:
if key in lookup.keys():
info = lookup.get(key)
val = fields.pop(key)
# The lookup table is a dictionary with the column
# names that come out of Jira as the key, and a tuple
# containing the corresponding column name in the
# first position, and optional nested levels that
# must be traversed to return the value we are looking
# for.
if len(info) <= 1 or not val:
fields[info[0]] = val
else:
fields[info[0]] = nested_vals(val,
info[1:],
key)
# Add custom fields
hash = md5()
hash.update(json.dumps(fields).encode('utf-8'))
try:
fields['time_estimate'] = int(fields['time_estimate'])
except (KeyError, TypeError):
pass
fields['etl_checksum_md5'] = hash.hexdigest()
fields['etl_process_status'] = ETL_PROCESS_STATUS
fields['etl_datetime_local'] = ETL_DATETIME_LOCAL
fields['etl_pdi_version'] = ETL_PDI_VERSION
fields['etl_pdi_build_version'] = ETL_PDI_BUILD_VERSION
fields['etl_pdi_hostname'] = ETL_PDI_HOSTNAME
fields['etl_pdi_ipaddress'] = ETL_PDI_IPADDRESS
writer.writerow(fields)
它所在的线是写作线。我在两台机器上都安装了相同版本的Python(使用Anaconda3),而在其他响应中看起来问题与Windows无法将Unicode打印到控制台有关。我的地方在DictWriter
死亡的地方我不太确定......
答案 0 :(得分:1)
通过在我的encoding=utf-8
声明中添加open
来解决...很奇怪,它对Mac来说非常直观,但Windows决定吮吸。