zoukankan      html  css  js  c++  java
  • 字符串和编码

    中文问题
    编写中文程序的方法:
    • 使用中文需要在第一行声明编码#encoding=utf-8
    • 文件保存为utf-8编码格式,在文件中的中文字符串需要使用u,例如:u'中文'
    • 因为python 只检查 #、coding 和编码字符串,所以你可能会见到下面的声明方式,这是有些人为了美观等原因才这样写的:    #-*- coding: UTF-8 -*-

    常见编码:
    • GB2312编码:适用于汉字处理、汉字通信等系统之间的信息交换
    • GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码
    • ANSI是与你使用的windows操作系统的语言有关系的,向windows 7 简体中文版就是GBK(用一个字节表示英文,用两个字节表示一个中文)
    • ASCII编码:是对英语字符和二进制之间的关系做的统一规定
    • Unicode编码:这是一种世界上所有字符的编码,但是它没有规定的存储方式。
    • UTF-8编码:是 Unicode Transformation Format - 8 bit 的缩写, UTF-8 是 Unicode 的一种实现方式。它是可变长的编码方式,可以使用 1~4 个字节表示一个字符,可根据不同的符号而变化字节长度。

    两种类型的字符串类型
    • 字节字符串:一个字节字符串就是一个包含字节列表。类型:str
    一个字节字符串就是一个包含字节列表<type 'str'> <type 'unicode'>。 当需要的时候,Python根据电脑默认的locale设置将字节转化成字符。 在Mac OX上默认的编码是UTF-8,但是在别的系统上,大部分是ASCII。
    #创建一个字节字符串
    byteString = "hello world! "
    代码示例:
    #-*- coding: UTF-8 -*-
    s = "hello normal string"
    print u"字节字符串",type(s)
    u = s.decode("UTF-8" )
    print u"Unicode字符串",type(u)
    backToBytes = u.encode( "UTF-8" )
    print u"字节字符串",type(backToBytes)
    更多解释:
    现在,字节字符串s就被当成一个UTF-8字节列表去创建一个Unicode字符串u, 下一行用UTF-8表示的字符串u转换成字节字符串backToBytes.

    • Unicode的字符串,类型:unicode
    #创建一个Unicode字符串:
    unicodeString = u"hello Unicode world!"

    编码转换
        Python内部的字符串一般都是 Unicode编码。代码中字符串的默认编码与代码文件本身的编码是一致的。所以要做一些编码转换通常是要以Unicode作为中间编码进行转换的,即先将其他编码的字符串解码(decode)成 Unicode,再从 Unicode编码(encode)成另一种编码。
    Ø decode 的作用是将其他编码的字符串转换成 Unicode 编码,例如:name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码
    Ø encode 的作用是将Unicode编码转换成其他编码的字符串,例如: name.encode(”GB2312“),表示将unicode字符串name转换成GB2312编码
    Ø 进行编码转换的时候必须先知道 name 是那种编码,然后 decode 成 Unicode 编码,最后载 encode 成需要编码的编码
    Ø name 已经就是 Unicode 编码了,那么就不需要进行 decode 进行解码转换了,直接用 encode 就可以编码成你所需要的编码
    Ø 对中文这类的unicode字符进行decode会报错
     
    文件的编码:
    Ø 在UTF-8文件中,则这个字符串就是 UTF-8编码的,它的编码取决于当前的文本编码
    Ø GB2312文本的编码就是GB2312
    Ø 在同一个文本中进行两种编码的输出等操作就必须进行编码的转换,先用decode将文本原来的编码转换成Unicode,再用encode将编码转换成需要转换成的编码
    例子:
    #-*- coding: UTF-8 -*-
    fp1 = open('d:\testfile.txt', 'r') #手工创建文件为ANSI编码保存(gbk)
    info1 = fp1.read()
    # 已知是 GBK 编码,解码成 Unicode、
    tmp = info1.decode('GBK')
     
    fp2 = open('d:\testfile.txt', 'w')   
    # 编码成 UTF-8 编码的 str
    info2 = tmp.encode('UTF-8') 
    fp2.write(info2)  #写入utf8字符,并进行保存
    fp2.close()       #文件会变为utf-8编码保存
     
  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/aprilwinds/p/5389274.html
Copyright © 2011-2022 走看看