首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python UTF-8拉丁文-1显示错误字符

Python UTF-8拉丁文-1显示错误字符
EN

Stack Overflow用户
提问于 2015-02-20 13:26:02
回答 1查看 1.6K关注 0票数 1

我正在编写一个非常小的脚本,可以将拉丁文-1字符转换为unicode (我是Python的完全初学者)。

我试过这样的方法:

代码语言:javascript
复制
def latin1_to_unicode(character):

    uni = character.decode('latin-1').encode("utf-8")
    retutn uni

它适用于不特定于拉丁文-1集的字符,但如果我尝试以下示例:

代码语言:javascript
复制
print latin1_to_Unicode('å')

它返回Ã¥而不是åæø等其他字母也是如此。

有人能解释一下为什么会发生这种事吗?谢谢

我的脚本中有# -*- coding: utf8 -*-声明,如果对问题有任何影响的话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-20 13:28:02

您的源代码被编码为UTF-8,但您正在将数据解码为拉丁文-1。不要这样做,您正在创建一个莫吉贝克

从UTF-8解码代替,不要再编码。print将写入使用终端或控制台编解码器配置的sys.stdout (在sys.stdout启动时检测到)。

我的终端配置为UTF-8,所以当我在终端中输入å字符时,会生成UTF-8数据:

代码语言:javascript
复制
>>> 'å'
'\xc3\xa5'
>>> 'å'.decode('latin1')
u'\xc3\xa5'
>>> print 'å'.decode('latin1')
Ã¥

您可以看到该字符使用两个字节;当使用配置为使用UTF-8的编辑器保存Python源代码时,Python会从磁盘读取完全相同的字节以放入字节串中。

将这两个字节解码为拉丁语-1会产生两个与拉丁语-1编解码器对应的Unicode码点。

您可能想研究Unicode与编码之间的区别,以及这与Python之间的关系:

  • 每个软件开发人员绝对、积极的绝对最低限度必须了解Unicode和字符集(没有借口!) (乔尔·斯波斯基)
  • 奈德·巴奇尔德( Ned )的语用Unicode
  • The Python Unicode HOWTO
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28630080

复制
相关文章

相似问题

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