【发布时间】:2020-04-22 04:52:34
【问题描述】:
Python 2.7 中的编码很难理解。有人可以向我解释如何获取这些字符串的符号吗?
这是我的 unicode 字符串:
my_str = u'MFADCINEMve000301119 FACTURE EFAD CIN\u2019troD+000000035165 EUR FACTURE EFAD CIN\u2019trop\xe9MA SAS 2019/10198'
我想把它转换成“\u2019”和“\xe9”。
我已经尝试my_str.encode('utf-8') 但这给了我:
'MFADCINEMve000301119 FACTURE EFAD CIN\xe2\x80\x99troD+000000035165 EUR FACTURE EFAD CIN\xe2\x80\x99trop\xc3\xa9MA SAS 2019/10198'
与其他编码符号。我不明白,我只是想将它们替换为 ' 和 é 符号...
更新:
更新 2:
这是我的代码:
day = datetime.now().day
month = datetime.now().strftime("%b")
year = datetime.now().strftime("%Y")
filename = "ventes{0}{1}{2}.csv".format(day, month, year)
with io.open(filename, 'w', encoding='utf-8') as file_data:
csvwriter = csv.writer(file_data, delimiter=',', quotechar="", quoting=csv.QUOTE_NONE)
for line in res:
csvwriter.writerow([x for x in line]) # Occurs error bellow
file_data.seek(0)
out = base64.encodestring(file_data.read())
即出现此错误(不一定明确):
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 546, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 583, in dispatch
result = self._call_function(**self.params)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 319, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 316, in checked_call
return self.endpoint(*a, **kw)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 812, in __call__
return self.method(*args, **kw)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 412, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 953, in call_button
action = self._call_kw(model, method, args, {})
File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 941, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 399, in old_api
result = method(recs, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/addons_eggs/adquat_export_CEGID/models/export_cegid.py", line 31, in validate
move_ids = self._context.get('active_ids', [])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 136: ordinal not in range(128)
这段代码有什么问题?请帮忙!
【问题讨论】:
-
在您的更新中,字节写入正确,但是您使用错误的编码打开了文件(根据我的经验/测试,很可能是 WIndows CP1252)。使用 UTF-8 编码重新打开它,您应该会看到正确的字符。
-
在您的第二次更新中,该错误不是来自显示的代码。 Python 2 中的 cab 模块不支持 Unicode 字符串。 Python 3 有更好的支持,Python 2 不再受支持。如果不切换,cab 模块文档底部有一个示例,说明如何处理 Unicode,或者获取 3rd 方 unicodecsv 模块。
-
嗯好吧..我会调查的,非常感谢!!
标签: python python-2.7 encoding utf-8 ascii