环境
我这里使用的环境是python2.7
正常使用,不用特殊处理
如获取路径,去读取文件,可以直接使用,不进行特殊处理
如果是中文路径的话, 不用关心,直接使用路径即可, 因为读取出来的就是gbk格式的,如下:
print __file__
print os.path.realpath(__file__)
#这个目录下如果有文件,我们是可以直接使用这个路径进行读取的
非要看一下中文的话
但是你要是输出出来的话,肯定是乱码, 因为这里是gbk格式的
,我们用的ide大概率是utf-8的,这个不用管,程序能知道就行,如果你你非要看一下的话,那么直接用gbk解码就行了, 如下:
print __file__.decode('gbk')
print os.path.realpath(__file__.decode('gbk'))
如果想在cmd里直接输出中文, 那么可以:
x = '你好世界'
print x.decode('utf-8').encode('gbk')
有几点要注意的是
1. pyqt
qt初始化的时候,如果要指定qt的插件路径,那么我们要传进去unicode,所以要用gbk解码一下
2. 获取管理员权限
下面两个地方最好也用gbk解码下
ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable.decode('gbk')), unicode(__file__.decode('gbk')), None, 1)
3. os.listdir()
这个方法是用来列举文件夹下文件的,接受一个unicode的参数,所以
- 如果是直接手写中文的话,那么需要
decode(utf-8')
- 如果是读取的中文的话,那么需要
decode('gbk')
大结局
python2默认是unicode编码
decode就是特殊编码转python2默认的unicode
encode就是python2默认地unicode转特殊编码
x = u'你好世界'
两个字符串拼接的时候, 只要有一个是unicode, 另一个也必须是unicode, 例如
x = u'你好世界'
y = str('你好世界')
print x, type(x)
print y, type(y)
print '{}{}'.format(x, y)
print '%s, %s' % (x, y)
中文str转中文unicodedecode('utf-8')
中文unicode转中文strencode('utf-8')
所以两个字符串拼接, 不确定是str还是unicode的时候, 可以这样
a = get_a()
b = get_b()
if isinstance(a, unicode):
a = a.encode('utf-8')
if isinstance(b, unicode):
b = b.encode('utf-8)
res = '{}{}'.format(a, b)