• python Unicode转ascii码的一种方法


    缘起

    看到这样的数据:Marek Čech、Beniardá怎样变成相对应的ascii码呢

    解决

    import unicodedata
    s = u"Marek Čech"   #(u表示是unicode而非 ascii码,不加报错!)
    line = unicodedata.normalize('NFKD',s).encode('ascii','ignore')
    print line

    结果

      Marek Cech

    python 2.* 中文编码问题

    问题要从文字的编码讲起。原本的英文编码只有0~255(28),刚好是8位1个字节。为了使计算机表示各种不同的语言,1个字节是大大不够的,自然要进行扩充。中文的话有GB系列、UTF-8,那么,它们之间是什么关系呢?

    Unicode是一种编码方案,又称万国码,可见其包含之广。但是具体存储到计算机上,并不用这种编码,而是用自身默认的编码方式,utf-8是互联网上使用的最广的一种Unicode的实现方式。UTF-8或者gbk也可以进行解码(decode)还原为Unicode。

    在python中Unicode是一类对象,表现为以u打头的,比如u'中文',而string又是一类对象,是在具体编码方式下的实际存在计算机上的字符串。比如utf-8编码下的'中文'和gbk编码下的汉字“中华”,并不相同。例如

     

    设计python的几个函数

    encode():编码
    decode():解码
    repr():返回一个可以用来表示对象的可打印的字串

    默认编码问题

    #coding: gbk 
    
    str1 = ''
    print repr(str1)
    
    str2 = u''
    print repr(str2)
    str3 = str2.encode('utf-8')
    str4 = str2.encode('gbk')
    print repr(str3)
    print repr(str4)
    str5 = str3.decode('utf-8') 
    print repr(str5)

    执行程序出现问题

    说gbk编码器不能解码。原因是何?看看自己的linux配置,用命令“locale”

    其中,与中文输入关系最密切的就是 LC_CTYPE, LC_CTYPE 规定了系统内有效的字符以及这些字符的分类,诸如什么是大写字母,小写字母,大小写转换,标点符号、可打印字符和其他的字符属性等方面。而locale定义zh_CN中最最重要的一项就是定义了汉字(Class “hanzi”)这一个大类,当然也是用Unicode描述的,这就让中文字符在Linux系统中成为合法的有效字符,而且不论它们是用什么字符集编码的。

    简单说:程序中写了个str1 = '汗',默认编码是utf-8,当赋予变量str1的时候,因为此时设定的编码为gbk,驴唇不对马嘴,编码与解码不一致,导致解码错误。

    修改如下(左),结果(右)

    延伸阅读:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  • 相关阅读:
    python库安装
    Reversing Linked List(根据输入序列对其做部分或全部反转)
    简单的一元二项(使用的是指针形式,方便调试)
    最大子序列问题
    centos6安装mysql5.5.53
    android中常用的drawable
    android四大组件之ContentProvider
    android使用shape来绘制控件
    android布局理解
    android命令行管理avd以及sqlite3命令
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/2643177.html
Copyright © 2020-2023  润新知