作者peanut97 (花生)
看板Python
标题Re: 新手想写登入BBS的程式(Python 3)
时间Thu Nov 21 00:02:40 2013
有解了!!! 自己来回自己的文
Python 2跟Python 3对字串的处理函式不太一样
在Python 3中,不用在程式里特别打上『# -*- coding: utf8 -*-』
他预设里面所有的字元都是utf-8编码了。
s = "中文" #这个"中文"是utf-8编码,变数s的型态是string
utf8ByteString = s.encode("utf-8")
utf8ByteString 为『以utf-8编码的byte string, 型态是byte喔』
而
big5ByteString = s.encode("big5")
big5ByteString 为『以big5编码的byte string, 型态是byte喔』
型态是byte的变数,他的encode, decode方法跟一般string又不太一样(虽然名字一样)
byte变数的decode(),是将原本的byte以指定的编码方式转回来。
ex:
result1 = utf8ByteString.decode("utf-8")
result1内容为"中文"
result2 = big5ByteString.decode("big5")
result2内容为"中文"
谢谢每个回应的板友! 你们的回应才让我有动力继续研究T_T
※ 引述《icycandle (你有压力,我有压力)》之铭言:
: 我习惯的工作环境是 python2.7 @ Unix-like OS,不过就来抛砖引玉一下。
: 首行的「# -*- coding: big5 -*-」是用来跟 interpreter 沟通用的,
: 换言之,只是让interpreter可以看懂你的source code。这跟程式的行为
: (字串到底是用何种编码)应该没有关系。
: 既然是 python3 预设的字串应该一律是 unicode。
: 如果要输出 Big5 的话,应该可以试试:
: "请输入代号".encode('cp950')
: cp950 基本上就是微软的Big5编码实作。
: ※ 引述《peanut97 (花生)》之铭言:
: : 我又做了新的测试:
: : 程式码:
: : ===============================================
: : # -*- coding: big5 -*-
: : import telnetlib
: : tn = telnetlib.Telnet('ptt.cc')
: : s = tn.read_until(b"ptt3")
: : print(s)
: : ===============================================
: : 会印出ptt的首页画面
: : 但改成read_until(b"请输入代号"),就不行,程式码:
: : ===============================================
: : # -*- coding: big5 -*-
: : import telnetlib
: : tn = telnetlib.Telnet('ptt.cc')
: : s = tn.read_until(b"请输入代号")
: : print(s)
: : ===============================================
: : 会显示错误:『bytes can only contain ASCII literal characters.』
: : 看read_until的文件,他接受的参数是byte string,所以应把字串转成byte string
: : 但看程式码第一行是用big5
: : 是不是指字串:『请输入代号』已经是big5编码
: : 所以要想办法把big5 转成byte string ?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.24.63.240
※ 编辑: peanut97 来自: 114.24.63.240 (11/21 00:09)