python怎么查看python3 字符串编码码

python中理解字符串和编码为什么这么难 - 简书
python中理解字符串和编码为什么这么难
在学习python2的时候,字符串和编码可以说是最让人困惑的知识点,假如知其然而不知其所以然,则在后续的写代码和学习过程中会让人很痛苦,甚至会放弃,而对比PHP语言来说,即使完全不了解编码等知识,也可以写出代码,这是幸事,但反过来说太透明会让你失去很多能力.
python2字符串和编码难理解的原因在于,一方面很多书籍很少说这方面的知识,另外一方面是python设计导致的,编码问题和文件编码,系统环境,IO操作等都有关系,混杂在一块很让人头疼.
网络上也有很多中文资料去说明,但是在学习的时候只能借鉴,原因在于写的人理解的也是比较片面,很容易误导人,所以在学习过程中一定要去实践,要仔细琢磨.
自己综合学习了下,以自己的方式写了篇博客,能力有限,希望不要误导人.
对于编码个人觉得理解概念即可,具体的转换规则,存储规则可以不用太仔细了解,这类似于进制,知道概念即可,不强制掌握进制转换的方法.
讲编码的文章很多,掌握以下概念即可.世界上任何一个字符都可以用一个Unicode编码来表示,一旦字符的Unicode编码确定下来后,就不会再改变了,但是unicode存在二个局限性,第一一个Unicode字符在网络上传输或者最终存储起来的时候,并不见得每个字符都需要两个字节,所以可能会造成空间浪费,第二一个Unicode字符保存到计算机里面时就是一串01数字,那么计算机怎么知道一个2字节的Unicode字符是表示一个2字节的字符呢,还是表示两个1字节的字符呢.
Unicode只是规定如何编码,并没有规定如何传输、保存这个编码.例如“汉”字的Unicode编码是6C49,可以用4个ascii数字来传输、保存这个编码,也可以用utf-8编码的3个连续的字节E6 B1 89来表示它,关键在于通信双方都要认可.因此Unicode编码有不同的实现方式,比如:UTF-8、UTF-16等等
python下的编码
python2对于编码理解困难,很大一部分原因在于系统有很多编码,这里说明下
#windows环境和linux环境下的区别
sys.getdefaultencoding()
sys.getfilesystemencoding()
locale.getdefaultlocale()
locale.getpreferredencoding()
sys.stdout.encoding()
sys.getdefaultencoding()不管在何种环境下返回都是ascii,所以默认情况下转码解码默认都是ascii
对于str类型,locale.getdefaultlocale()决定了具体的编码格式.具体见下面说明
sys.stdout.encoding表示输出使用的编码,同样的文件编码,同样的代码,不同的系统环境输出是有差异的
最佳实践文件本身的编码和文件头编码(# coding=utf-8)保持一致
Python2中str和unicode对象
首先声明下,自己运行的代码在windows和linux环境各有一份示例,且通过python交互式解析器来说明.
python解析器不用用户定义编码头,所以内部处理依赖于locale环境.
在windows机器运行
&&& import locale
&&& locale.getdefaultlocale()
('zh_CN', 'cp936')
在linux机器运行
&&& import locale
&&& locale.getdefaultlocale()
('en_US', 'UTF-8')
在python中和字符串相关的数据类型,分别是str、unicode两种,他们都是basestring的子类.
在python代码中定义str,unicode类型,解析器是如何解析的呢
读出文件内容
将内容根据文件编码解码成为unicode
解析unicode字符串,假如定义是u开头,创建一个unicode对象
解析str字符串,将会从unicode按照文件编码再编码成为str对象
通过代码看看字符串在内部是如何存储的
&&& a="哈哈"
&&& type(a)
&type 'str'&
'\xb9\xfe\xb9\xfe'
&&& len(a)
&&& a = '哈哈'
&&& type(a)
&type 'str'&
'\xe5\x93\x88\xe5\x93\x88'
&&& len(a)
str存储的是已经编码后的字节序列,输出时看到每个字节用16进制表示,以\x开头,linux环境下每个汉字会占用3个字节的长度,windows环境下每个汉字会占用2个字节的长度
unicode类型
#linux和windows环境一样
&&& a=u'哈哈'
&&& type(a)
&type 'unicode'&
u'\u54c8\u54c8'
&&& len(a)
unicode是"字符"串,存储的是编码前的字符,输出是看到字符以\u开头,每个汉字占用一个长度
通过上述可以看出:
定义unicode和系统环境没有联系,存储的是以u开头的unicode字符集
str类似于字符数组,str类型定义内部存储则和系统环境有关系,假如系统环境是utf-8则存储utf-8规则的字符数组,假如系统环境是cp936则存储cp936规则的字符数组.
str类型不要使用len这样的函数,因为截取出来可能就是所谓的乱码了.
python2中str和unicode如何转换
既然同时存在str和unicode类型,则就涉及到二者的转换了.
先说基本概念
str = unicode.encode(字符编码),从unicode转换成指定编码的str对象
unicode = str.decode(字符编码),特指从指定编码的str对象转换为unicode对象
str转换为unicode的时候,必须知道原有字符串编码是什么类型的,假如指定错误则会报错
str从一种编码转换为另外一种编码的时候,必须先转换为unicode,再转换成指定编码的str类型
一般情况下,不应该同时定义str和unicode类型,尽量使用unicode类型,假如都统一使用unicode类型,那为什么还要出现str类型呢,在python2中,一般在I/O操作的时候才会有编码转换,这在后面描述.
print字符串发生了什么
任何对象都默认包含内建方法str,在print的时候,该方法生效假如print unicode对象,则根据默认编码解码为str对象.假如print str对象,由于输出就是str对象,默认不用做任何解码.
看下面的例子,注意这里是通过python file.py的方式运行,在windows下运行是乱码,而在linux下运行显示正确,原因在于sys.stdout.encoding
#!/usr/bin/env python
#coding=utf-8
a = '哈哈'
sys.stdout.encoding表示print输出使用的编码.在linux环境下,由于输出的编码本来就是utf-8,所以能正确显示在windows环境下,str字符串存储的是utf-8序列,显示要求的却是gbk,则出现乱码,所以需要转码,修改如下:
#!/usr/bin/env python
#coding=utf-8
a = '哈哈'
print a.decode('utf-8').encode('gbk')
#在内部存储gbk类型的str字符串
而定义uinicode对象的时候,不会涉及任何的转码问题,print的时候,unicode对象能够根据文件编码自动转换以下代码在任何环境下都能正常运行
#!/usr/bin/env python
#coding=utf-8
a = u'哈哈'
IO操作发生了什么
正因为有IO操作,str类型的对象可能才有存在的意义.或者说假如没有可恶的str对象,则世界就太平了.
内置的open函数打开文件时,read方法读取的是一个str,用你知道的编码把它解码成unicodeopen函数打开文件之后的写操作,则需要将需要写入的字符串按照其编码encode为一个str.
是不是很熟悉,print语句输出和文件打开一样都是str类型,尽可能处理的时候抛弃str,确保处理的对象是unicode,只在需要的时候才转码.
通过下面的代码就能明白繁琐的转码和解码操作
#!/usr/bin/env python
#coding=utf-8
def filewrite():
file1 = os.getcwd() + "\1.txt"
file2 = os.getcwd() + "\2.txt"
str= u'我们是中国人'
f = open(file1, "a")
f.write(str.encode('gbk'))
f2 = open(file2, "a")
f2.write(str.encode('utf-8'))
f2.close()
def fileread():
file1 = os.getcwd() + "\1.txt"
file2 = os.getcwd() + "\2.txt"
f= open(file1,"r")
data = f.read()
print(data)
f= open(file2,"r")
data = f.read()
print(data.decode('utf-8'))
filewrite()
fileread()
IO操作使用codecscodecs模块也提供了一个open函数,可以直接指定好编码打开一个文本文件,那读取到的文件内容则直接是一个unicode字符串.对应的指定编码后的写入文件,则可以直接将unicode写到文件中
#!/usr/bin/env python
#coding=utf-8
import codecs
def codecswrite() :
file3 = os.getcwd() + "\3.txt"
str = u'哈哈'
f = codecs.open(file3,"w",'utf-8')
f.write(str)
def codecsread():
file3 = os.getcwd() + "\3.txt"
f = codecs.open(file3,"r",'utf-8')
data = f.read()
print (data)
codecswrite()
codecsread()
字符串拼接发生了什么
unicode和str类型通过+拼接时,输出结果是unicode类型,相当于先将str类型的字符串通过decode()方法解码成unicode再拼接
#windows环境,python交互式运行
&&&a="中国"
&&&b=u"你好"
会出现UnicodeDecodeError: 'ascii' codec can't decode byte 0xd6 in position 0: ordinal not in range(128)错误,原因在于python自动将str类型的变量按照默认的编码格式sys.getdefaultencoding()来解码,默认编码即ascii,而这个字符不在ascii的范围内,就出现了错误,所以需要修改如下
#windows环境,python交互式运行
&&&a="中国"
&&&b=u"你好"
&&& a.decode('gbk')+b
u'\u4e2d\u56fd\u4f60\u597d'
让我们轻松下
这里看下python中的字符串的处理方式,其实在学习的时候和PHP比较下更让人有印象
单引号,双引号,转义
python中,字符串可以用单引号和双引号括起来,没有区别.假如字符串用单引号括起来,则字符串中则不能有单引号,除非通过转义去处理,同理双引号也一样
&&& "hello"
&&& print "hello"
通过python打印的字符串会被双引号括起来,这是因为python打印值的时候会保持该值在python代码中的状态.而通过python语句则结果不一样.
这里就涉及到值被转换为字符串的两种机制:str函数:把值转换为合理形式的字符串,以便人类能够理解.repr函数:把值转换为python能够认识的值.
&&& print repr("hello")
&&& print repr(1000L)
&&& print str("hello")
&&& print str(1000L)
input和raw_input
input假设输入的是合法的python表达式,不然会报错
&&& name=input("please:")
please:hello
Traceback (most recent call last):
File "&stdin&", line 1, in &module&
File "&string&", line 1, in &module&
NameError: name 'hello' is not defined
应该变更为:
&&& name=input("please:")
please:"hello"
&&& print name
而raw_input函数则将所有的输入当作原始数据
&&& name=raw_input("please:")
please:hello
&&& print name
长字符串假如要写多行的字符可以使用三个引号
str='''hello
print(str)
引号之间的内容原本是什么样输出也是什么样的,可以直接使用单双引号,不用转义普通字符也可以跨行,只要一行之中最后一个字符是反斜线,那么换行就转义了
str='hello\
print(str)
原始字符串原始字符串对于反斜线不会特殊对待
str=r'hello\nworld'
print(str)
\n字符在原始字符串里面就不是换行了而是原始的\n字符
PHP Python 程序员Posts - 132,
Articles - 0,
Comments - 101
代码改变命运!恩,努力吧!
16:58 by 天才卧龙, ... 阅读,
我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是。
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。
但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
现在,捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。
字母A用ASCII编码是十进制的65,二进制的;
字符0用ASCII编码是十进制的48,二进制的,注意字符'0'和整数0是不同的;
汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01101。
你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00001。
新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。
所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
字符ASCIIUnicodeUTF-8
从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。
搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
所以你看到很多网页的源码上会有类似&meta charset="UTF-8" /&的信息,表示该网页正是用的UTF-8编码。
Python的字符串
搞清楚了令人头疼的字符编码问题后,我们再来研究Python的字符串。
在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如:
&&& print('包含中文的str')
包含中文的str
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:
&&& ord('A')
&&& ord('中')
&&& chr(66)
&&& chr(25991)
如果知道字符的整数编码,还可以用十六进制这么写str:
&&& '\u4e2d\u6587'
两种写法完全是等价的。
由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
Python对bytes类型的数据用带b前缀的单引号或双引号表示:
x = b'ABC'
要注意区分'ABC'和b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。
以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:
&&& 'ABC'.encode('ascii')
&&& '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
&&& '中文'.encode('ascii')
Traceback (most recent call last):
纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
在bytes中,无法显示为ASCII字符的字节,用\x##显示。
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:
&&& b'ABC'.decode('ascii')
&&& b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
要计算str包含多少个字符,可以用len()函数:
&&& len('ABC')
&&& len('中文')
len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:
&&& len(b'ABC')
&&& len(b'\xe4\xb8\xad\xe6\x96\x87')
&&& len('中文'.encode('utf-8'))
可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
在操作字符串时,我们经常遇到str和bytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。
由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码:
如果.py文件本身使用UTF-8编码,并且也申明了# -*- coding: utf-8 -*-,打开命令提示符测试就可以正常显示中文:
最后一个常见的问题是如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。
在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:
&&& 'Hello, %s' % 'world'
'Hello, world'
&&& 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
常见的占位符有:
十六进制整数
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
&&& '%2d-%02d' % (3, 1)
&&& '%.2f' % 3.1415926
如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:
&&& 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'
有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:
&&& 'growth rate: %d %%' % 7
'growth rate: 7 %'
Python 3的字符串使用Unicode,直接支持多语言。
str和bytes互相转换时,需要指定编码。最常用的编码是UTF-8。Python当然也支持其他编码方式,比如把Unicode编码成GB2312:
&&& '中文'.encode('gb2312')
b'\xd6\xd0\xce\xc4'
但这种方式纯属自找麻烦,如果没有特殊业务要求,请牢记仅使用UTF-8编码。
格式化字符串的时候,可以用Python的交互式命令行测试,方便快捷。26被浏览2213分享邀请回答1添加评论分享收藏感谢收起0添加评论分享收藏感谢收起Python函数str()的字符编码操作? - 查看主题 & Ubuntu中文论坛
&[ 9 篇帖子 ]&
&文章标题 : Python函数str()的字符编码操作?发表于 :
5:11帖子: 1007
我正在把web服务器上的php整体转移到python。遇到一个小问题。a.py返回动态html页面,a.py是utf-8的,最后返回的结果是个tuple,我就直接用str()来转换成字符串,然后返回给浏览器。Javascript通过xhttp直接操作返回的字符串。结果是返回的中文全部是编码,不知道是什么编码,就不知道怎么decode,反正不是escape()。然后我在a.py里就不用str(),直接循环输出这个tuple的字符串,js不需要处理就可以了。问题:str()对字符编码是如何处理的?如果要用str(),该怎么用,在js里就不需要解码了?如果一定要解码,javascript里如何解码?谢
_________________Dell D620 -& Asus U44SGDapper-&Edgy-&Feisty-&Gutsy-&Hardy-&Karmic-&Lucid -& Oneric -& Precise-&TrustyPython+JSFirefox/Thunderbird 插件接活中。。。
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
5:11帖子: 1007
顶一下。。。
_________________Dell D620 -& Asus U44SGDapper-&Edgy-&Feisty-&Gutsy-&Hardy-&Karmic-&Lucid -& Oneric -& Precise-&TrustyPython+JSFirefox/Thunderbird 插件接活中。。。
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
23:46帖子: 4125
系统: Arch Linux
引用:When we cannot quantify the cost of inaction it often looks like a reasonable choice because we assume that it’s free. That assumption is the root of a lot of problems.就算没办法用 python3,你也可以参考下 python3 是如何处理编码问题的。
_________________我的博客 我的vimrc:
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
5:11帖子: 1007
楼上的那个小文倒有点意思,不过估计你没有看完回复。我觉得用LTS的UBUNTU安身,所以就不麻烦上python3了。如果,只是如果,你确定是python问题的话,我也就不烦了。
_________________Dell D620 -& Asus U44SGDapper-&Edgy-&Feisty-&Gutsy-&Hardy-&Karmic-&Lucid -& Oneric -& Precise-&TrustyPython+JSFirefox/Thunderbird 插件接活中。。。
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
23:46帖子: 4125
系统: Arch Linux
sanz 写道:楼上的那个小文倒有点意思,不过估计你没有看完回复。我觉得用LTS的UBUNTU安身,所以就不麻烦上python3了。如果,只是如果,你确定是python问题的话,我也就不烦了。我确定如果你用 python3 的话,你的 str 会返回更易读的信息,当其中包含 unicode 的时候。
_________________我的博客 我的vimrc:
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
19:04帖子: 1404地址: 0xFF00EE
顶顶顶顶更健康
_________________
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
18:54帖子: 4671
送出感谢: 0 次
str 不处理编码object.__str__(self)?Called by the str() built-in function and by the print statement to compute the “informal” string representation of an object. This differs from __repr__() in that it does not have to be a valid Python expression: a more convenient or concise representation may be used instead. The return value must be a string object.编码是由不同的类的__str__方法处理的。部分框架,可能会把tuple直接序列化。
_________________
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
16:10帖子: 41地址: 微风的河岸
接收感谢: 0 次
在Py2中代码:&&& tuple(u&你好世界&)(u'\xc4', u'\xe3', u'\xba', u'\xc3', u'\xca', u'\xc0', u'\xbd', u'\xe7')&&& str(tuple(u&你好&))&(u'\\xc4', u'\\xe3', u'\\xba', u'\\xc3')&&&& &&.join(tuple(u&世界&))u'\xca\xc0\xbd\xe7'&&& u&你好&u'\xc4\xe3\xba\xc3'根据LZ描述估计是上面的情况,而下面的两种情况都是可以正确输出的。代码:#coding: utf-8print u&你好&.encode()这个是Windows下的。#coding: utf-8print u&你好&这个是在Linux下的。如果要保存文件的话用codecs.open,不用built-in的open,可以加“encoding='utf-8'”作为关键词参数。如果返回给浏览器的话,可以通过“u&世界&.encode('utf-8')”编码为和xhtml中head一致的编码。
&文章标题 : Re: Python函数str()的字符编码操作?发表于 :
11:43帖子: 239
送出感谢: 0 次
str应该只是转换吧,和编码无关。python2的编码要什么encode之类的,我用django从来不处理这些,django帮忙了
显示帖子 : 全部帖子1天7天2周1个月3个月6个月1年&排序 作者发表时间文章标题 升序降序&
&[ 9 篇帖子 ]&
正在浏览此版面的用户:没有注册用户 和 0 位游客
您 不能 在这个版面发表主题您 不能 在这个版面回复主题您 不能 在这个版面编辑帖子您 不能 在这个版面删除帖子您 不能 在这个版面提交附件
选择一个版面
------------------
公告/注意事项
& &新闻和通知
& &校园社团支持
& && &华东校区
& && &华南校区
& && &华北校区
& && &华中校区
& && &东北校区
& && &西北校区
& && &港澳台校区
& && &国外校区
& &软件推荐
& &非常任务
系统安装区
& &教学和常见问答
& && &课堂教学和培训
& &初学者园地 - 17.10 Artful Aardvark
& &系统安装和升级
& && &新立得和软件源
& && &Wubi安装讨论
& &启动和引导
& &网卡问题以及网络和拨号
& && &校园网拨号
& &笔记本、UMPC支持
& &手机和平板
& && &Ubuntu移动应用开发
& &常用硬件支持
& &系统架构支持
配置美化区
& &字体美化和中文支持
& && &个人配置文件存放点
& &桌面特效
& &窗口管理器
& &屏幕抓图
& &办公、图像、机械电子设计等
& && &Vim和Emacs
& &因特网相关软件
& &影音多媒体
& &Wine及其分支
& &游戏和游戏模拟器
& &虚拟机和虚拟化
& &其它类软件
& &开源模板库
服务器管理
& &服务器基础应用
& &数据库管理
& &服务器维护和硬件相关
& &Ubuntu VPS
参与Ubuntu开发
& &软件和文档翻译
& &编译或打包
& &Ubuntu错误报告
程序设计区
& &Shell脚本
& &GTK+和QT
& &软件/网站开发
& && &Python/Php/Perl
& && &C/C++/Java
& &内核及嵌入式开发
& &开源小工具
& &Ubuntu 18.04 LTS
& &Ubuntu 16.04 LTS
& &Ubuntu 14.04 LTS
& &Ubuntu 12.04 LTS
& &Ubuntu 10.04 LTS
& &老旧版本支持
衍生发行版
& &Ubuntu GNOME
& &Kubuntu
& &Xubuntu & Lubuntu
& &Ubuntu中文衍生版
& && &UbuntuKylin
& &Ubuntu国外衍生版
& && &Mint
& &Ubuntu衍生版制作
& &其它类Unix OS发行版
& && &Arch发行版
& && &Debian发行版
& && &OpenSUSE发行版
& && &Deepin
& &深度PK版
& &Ubuntu故事和感慨
& &Full Circle开源杂志
分享交流区
& &同城交流
& &线下活动专版
& &Ubuntu宣传推广
& &论坛管理
& && && &Ubuntu中文网上商店

我要回帖

更多关于 python打印字符串编码 的文章

 

随机推荐