ret.depre()尝试
ret使用系统编码隐式编码-在您的情况下为ascii。
如果您明确编码unipre字符串,则应该没问题。有内置的编码可以满足您的需求:
>>> 'Xxc3xbcYxc3x9f'.enpre('raw_unipre_escape').depre('utf-8')'XüYß'
确实,
.enpre('latin1')(或cp1252)可以,因为这几乎是服务器很少使用的内容。该
raw_unipre_escape编解码器将只是给你的东西识别在最后,而不是抛出一个异常:
>>> '€xe2x82xac'.enpre('raw_unipre_escape').depre('utf8')'\u20ac€'>>> '€xe2x82xac'.enpre('latin1').depre('utf8')Traceback (most recent call last): File "<stdin>", line 1, in <module>UnipreEnpreError: 'latin-1' prec can't enpre character 'u20ac' in position 0: ordinal not in range(256)
如果遇到这种混合数据,则可以再次使用编解码器来规范化所有内容:
>>> '€xe2x82xac'.enpre('raw_unipre_escape').depre('utf8')'\u20ac€'>>> '\u20ac€'.enpre('raw_unipre_escape')b'\u20ac\u20ac'>>> '\u20ac€'.enpre('raw_unipre_escape').depre('raw_unipre_escape')'€€'