首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python编码字符串

如何使用python编码字符串
EN

Stack Overflow用户
提问于 2016-06-15 21:39:33
回答 1查看 846关注 0票数 1

我有包含元素的列表

代码语言:javascript
复制
[u'\xd0\xbc\xd1\x82\xd1\x81 \xd0\xbe\xd1\x84\xd0\xb8\xd1\x86\xd0\xb8\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd1\x81\xd0\xb0\xd0\xb9\xd1\x82']
[u'\xd0\xbc\xd1\x82\xd1\x81 \xd0\xbe\xd1\x84\xd0\xb8\xd1\x86\xd0\xb8\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd1\x81\xd0\xb0\xd0\xb9\xd1\x82']

我试着用

代码语言:javascript
复制
val[0].encode('utf-8')

然后得到了它

代码语言:javascript
复制
мÑÑ Ð¾ÑиÑиалÑнÑй ÑайÑ
мÑÑ Ð¾ÑиÑиалÑнÑй ÑайÑ

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 21:46:32

您有一个莫吉贝克;使用错误的编解码器解码文本。

你有看上去像它被解码,拉丁-1或Windows代码页1252,而它应该被解码为UTF-8而不是。

要么手动逆转编码,要么使用优秀的套餐为您完成此操作:

代码语言:javascript
复制
>>> import ftfy
>>> data = [u'\xd0\xbc\xd1\x82\xd1\x81 \xd0\xbe\xd1\x84\xd0\xb8\xd1\x86\xd0\xb8\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd1\x81\xd0\xb0\xd0\xb9\xd1\x82']
>>> ftfy.ftfy(data[0])
u'\u043c\u0442\u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442'
>>> print ftfy.ftfy(data[0])
мтс официальный сайт

手动,您将重新编码为拉丁文-1:

代码语言:javascript
复制
>>> data[0].encode('latin1')
'\xd0\xbc\xd1\x82\xd1\x81 \xd0\xbe\xd1\x84\xd0\xb8\xd1\x86\xd0\xb8\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd1\x81\xd0\xb0\xd0\xb9\xd1\x82'
>>> data[0].encode('latin1').decode('utf8')
u'\u043c\u0442\u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442'
>>> print data[0].encode('latin1').decode('utf8')
мтс официальный сайт

注意,您有一个包含一个unicode对象的列表。您可能想学习Python和Unicode;我推荐以下文档:

  • 奈德·巴奇尔德( Ned )的语用Unicode
  • 每个软件开发人员绝对、积极的绝对最低限度必须了解Unicode和字符集(没有借口!) (乔尔·斯波斯基)
  • The Python Unicode HOWTO

这些将帮助您理解何时编码、何时解码以及使用什么编解码器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37846237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档