Python &引用;UnicodeEncodeError:&x27;charmap';编解码器可以';t编码字符“;由CSV模块触发

Python &引用;UnicodeEncodeError:&x27;charmap';编解码器可以';t编码字符“;由CSV模块触发,python,unicode,python-3.5,Python,Unicode,Python 3.5,我刚开始一项新工作,我们在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 writero

我刚开始一项新工作,我们在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>
回溯(最近一次呼叫最后一次):
文件“\jira_oauth.py”,第260行,在
writer.writerow(字段)
文件“C:\Anaconda3\lib\csv.py”,第153行,writerow格式
返回self.writer.writerow(self.\u dict\u to\u list(rowdict))
文件“C:\Anaconda3\lib\encodings\cp1252.py”,第19行,编码
返回codecs.charmap\u encode(输入、自身错误、编码表)[0]
UnicodeEncodeError:“charmap”编解码器无法对位置1368-1369中的字符进行编码:字符映射到
我将在我的代码中发布指向它的行:

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)
用于范围内的循环(拉力):
#对于范围内的循环(拉力):
logging.info('On cycle:{}'。格式(cycle))
数据url=数据url+mk数据端点(最大分辨率,起始位置)
logging.info('最大结果:{}-起点:{}'。格式(
最大分辨率,从
))
#下拉数据并转换为字典
data=json.load(o.get_data(data_url).decode('utf-8'))
对于数据中的问题['issues']:
字段=问题['fields']
字段['id']=问题['id']
字段['key']=问题['key']
清除数据(字段)
拆分项目(字段“项目”、“项目密钥”、“项目名称”)
fields\u keys=list(fields.keys())
对于输入键字段\ U键:
如果输入lookup.keys():
info=lookup.get(键)
val=字段.pop(键)
#查找表是一个包含列的字典
#以Jira为键的名称和一个元组
#在中包含相应的列名
#第一个位置和可选的嵌套级别
#必须遍历以返回我们正在查找的值
#因为。

如果len(info)通过将
encoding=utf-8
添加到我的
open
语句中来解决。。。非常奇怪,它直观地适用于Mac,但Windows决定吸。

引用文档中的话:“在文本模式下,如果未指定编码,则使用的编码取决于平台:locale。调用GetPreferredEncode(False)以获取当前的locale编码。”这在Windows上从来都不是
utf-8
,但通常是在Linux/OSX上。@flybonzai抱歉,您的
open语句在代码中的什么位置?我们应该把
编码=utf-8
放在哪里?