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编码保存
     
  • 相关阅读:
    java applet传参和接收
    如何开启to 日志
    Linux重启网卡的方法
    java下载远程文件到本地
    下载文件使用缓存(一次性读取到内存),优化性能(注意静态对象修改需要加锁)
    浏览器地址传中文解决方法 URLEncoder.encode(str,"编码") new URLDecoder().decode(str,"编码")
    根据端口号(http和https的)跳转到不同的工程
    删除某个文件夹下的所有文件(或一类执行文件)
    http和https访问jsp传送中文参数
    根据取模选择不同的列表
  • 原文地址:https://www.cnblogs.com/aprilwinds/p/5389274.html
Copyright © 2011-2022 走看看