字符串和编码

中文问题

编写中文程序的方法:

  • 使用中文需要在第一行声明编码#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编码保存

时间: 2024-10-24 20:04:58

字符串和编码的相关文章

JS对字符串进行编码

JavaScript中有三个可以对字符串编码的函数, 分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent . 下面简单介绍一下它们的区别 1 escape()函数 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法 escape(string) 参数  描述  string  必需.要被转义或编码的字符串. 返回值 已编码的

[转]字符串和编码

编码是真的是非常头疼的一个问题. 看到一份说的非常简洁清晰的文章,分享记录一下. 廖雪峰: 字符串和编码

文件编码和文件内的字符串字面值编码是两个概念

我们知道,CALabel的字符串使用的是UTF8编码,通常在xcode下,直接CALabel *p = ...; p->setText("汉字"),显示汉字是没有任何问题的,但是,在VS2013中却显示的是乱码.很多人在群里面问了,我都答:请使用UTF8编码.他说,我的文件是UTF8格式的啊.呵呵,没那么简单好吗,文件编码和字符串字面值编码是两个概念. VS2013的一条预编译指令#pragma execution_character_set("utf-8")

廖雪锋笔记2:字符串和编码

字符串和编码 计算机内存中:unicode 在保存与传输过程中要求encode:一般网络utf-8编码方式,对内存中的uncode字符再编码 编码: >>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' 解码: >>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe

PHP安全的URL字符串base64编码和解码

这篇文章主要介绍了PHP安全的URL字符串base64编码和解码,在base64的基础上替换了不安全的一些字符,需要的朋友可以参考下 如果直接使用base64_encode和base64_decode方法的话,生成的字符串可能不适用URL地址.下面的方法可以解决该问题: URL安全的字符串编码: function urlsafe_b64encode($string) {    $data = base64_encode($string);    $data = str_replace(array

如何使用Java代码获取文件、文件流或字符串的编码方式

今天通过网络资源研究了一下如何使用Java代码获取文件.文件流或字符串的编码方式,现将代码与大家分享: package com.ghj.packageoftool; import info.monitorenter.cpdetector.io.ASCIIDetector; import info.monitorenter.cpdetector.io.ByteOrderMarkDetector; import info.monitorenter.cpdetector.io.CodepageDete

java转换字符串的编码(转)

package com.Alex.base; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ public static final String US_ASCII = "US-ASCII"; /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-

python教程1:Python基础之数据类型和变量、字符串和编码

视频链接: 我是在Linux下玩python的,Linux下默认安装python,直接打个pyhon3就好了,python大小写敏感 我们来写第一个简单的python程序 #!/usr/bin/env python3 print("Hello World") 怎么运行呢?有人说是./运行,然而我试了试并不可以....这样才行..... python name.py print里面也可以输出多个字符串,用 , 进行分隔,显示的内容是空格 #!/usr/bin/python print('

Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化

Python入门(二)--IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化 我们从今天就开始正式的学习PY交易了,PY交易还行,我们有基础之后学习起来倒不是说那么的被动,我学习的是Python2.7,虽然现在随着版本的迁移至Python3,但是这个并不会对我们造成什么困扰,毕竟只是一个适应阶段 我们的学习资料:廖雪峰官方网站Python2.7教程 一.IDE选择PyCharm 我们虽然在前面一章已经配置过,但是我们还是有很多的IDE可以开发Py,比如su

javascript中URL字符串进行编码

javascript中对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,对应的有3个解码函数:unescape,decodeURI,decodeURIComponent1,escape:采用ISO Latin字符集对指定的字符串进行编码.所有的空格符.标点符号.特殊字符以及更多有联系非ASCII字符都将被转化成%xx各式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字).比如,空格符对应的编码是%20. 2,encodeURI:把UR