作者aa4live (Horse)
看板Python
标题[问题] telnetlib文字编码问题
时间Tue Jun 14 09:26:19 2016
各位前备好
近日BS2要关站
想用python写一个贴文机器
把备份下来的txt文档贴到ptt2的个板上
但是在文字编码上出了问题
以下是贴文部分的code
读资料夹档案
for dirPath, dirNames, fileNames in os.walk("./BS2/"):
读档
for file in fileNames:
print (file)
ctrl+p进入发文画面
tn.write('\x10'.encode('ascii'))
time.sleep(1)
tn.write("\r\n".encode('big5'))
time.sleep(1)
输入文章标题
tn.write(file.encode('big5'))
time.sleep(1)
tn.write("\r\n".encode('big5'))
time.sleep(1)
开启备份txt档并写入
ftxt = open("./BS2/%s"%file,"r")
lines = ftxt.readlines()
for line in lines:
tn.write(line.encode('big5')) <==主要问题在这列
tn.write("\r\n".encode('big5'))
ftxt.close()
等同ctrl+x 文章存档贴出
tn.write('\x18'.encode('ascii'))
time.sleep(1)
tn.write("s\r\n0\r\n\r\n".encode('big5') )
time.sleep(1)
tn.write('\x0C'.encode('ascii'))
time.sleep(1)
问题描述:
如果文章中有用到一些特殊字元(例如表格)
big5就吃不进去(会找不到编码然後程式停止报错)
如果那边编码使用utf-8是不会停止後报错
但是贴出来的文都变成乱码
请问这种状况有解法吗?
谢谢!
--
1F:推 sandwichpope:小妹妹,你想要成为魔法少女吗?03/29 20:32
2F:推 sandwichpope:要成为魔法少女的第一步就是要先熟练地使用魔法棒03/29 20:32
3F:推 sandwichpope:大哥哥的这根魔法棒可以让你做练习喔03/29 20:32
4F:推 sandwichpope:只要搓一搓,神奇魔法棒就会变长03/29 20:32
5F:推 sandwichpope:再用力搓搓,魔法棒就会产生魔法药水03/29 20:32
6F:推 sandwichpope:如果喝下魔法药水,你就能成为魔法少女了03/29 20:32
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.92.63.147
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1465867582.A.70B.html
7F:→ alibuda174: 错误讯息? 06/14 09:40
Traceback (most recent call last):
File "py_bbs2.py", line 78, in <module>
tn.write(line.encode('big5'))
UnicodeEncodeError: 'big5' codec can't encode character '\u2554' in position
5: illegal multibyte sequence
※ 编辑: aa4live (140.92.63.147), 06/14/2016 09:52:12
8F:→ alibuda174: 嗯,开档时加上参数errors='ignore'舍弃那些字元吧 06/14 09:58
9F:→ alibuda174: 要不然就要自己转换 06/14 09:59
谢谢!
不知道可以这样忽略XD
虽然文章会有缺漏一点
但是整体而言备份的效果有做到就好....
感恩~
10F:推 kaichan: 可以试一下 "cp950" 而不是 "big5"。 06/14 11:45
11F:→ kaichan: 像「碁」这个字 cp950 可以转,big5 不能转 06/14 11:46
12F:推 kaichan: 你的这个字也可以用 cp950。 "\u2554".encode('cp950') 06/14 11:52
换成CP950後已没有问题
之前问题主要出在表格的框线上Orz...
感谢~
13F:→ uranusjr: 如果是 BBS 的话通常用 big5-hkscs 可以搞定 06/14 12:50
14F:→ uranusjr: 其实关键是你的档案本身是用什麽编码存的... 06/14 12:51
生txt档的程式是直接拿别人的来用
看不出是什麽编码
不过我再windows的环境执行他应该会是预设的CP950(?
但是CP950能显示日文感觉一整个怪
(wiki说CP950不含日文,是wiki没更新还是根本就是我误会?)
15F:→ uranusjr: CP950 确实不含日文, 我觉得你应该先确实知道它用的编码 06/14 18:12
16F:→ uranusjr: 最简单的方法装个 chardet 就可以试着侦测 06/14 18:12
17F:推 os653: cp950 不含日文没错,你有灌 Unicode 补完计画? 06/14 20:25
18F:→ os653: 有灌的话在 console 能显示日文,但是是会有问题的日文 06/14 20:25
找了一个转出来含日文的档案用chardet来测试
结果是这样
{'encoding': None, 'confidence': 0.0}
win7记事本开起来也看不到日文
但是读档贴到PTT2个板上显示是正常的
读档是用投两位推文的方法
ftxt = open("./BS2/%s"%file,"r",encoding='cp950', errors='ignore')
为什麽读成cp950之後贴到PTT2上面会正常rrrrrr
因为开档的时候ignore了这些日文的编码
可是直接贴到P2上他认的出来?
这样想不知道对不对0.0
※ 编辑: aa4live (140.92.63.147), 06/15/2016 09:43:02
21F:→ alibuda174: 可以直接提供档案吗? 06/15 09:45
http://tinyurl.com/gpd9je3
测试用档案在这
放在google硬碟上他预览是正常能显示的0.0
22F:→ uranusjr: 这个档案我用 Big 5 HKSCS 可以正常显示 06/15 12:08
23F:→ alibuda174: 请问为什麽你的档案编码是Big5-HKSCS?香港人? 06/15 15:46
24F:推 eight0: 话说既然 tn.write 吃 bytes,直接把档案读成 bin 再喂给 06/15 16:26
25F:→ eight0: 它就行了吧? 06/15 16:27
感谢点破盲点XD
26F:→ s860134: 印象中 Big 5 HKSCS 与 Big5-UAO 有些关联 06/16 00:10
27F:→ s860134: 但是你说要转贴到PTT2 用 eight0 的方法应该蛮不错的 06/16 00:17
28F:→ s860134: 不要尝试去 encode 直接 byte 写 byte 读 06/16 00:17
真是一个突破盲点!
这样就不用去管编码问题了
29F:→ uranusjr: s860134: UAO 有一部分编码是照抄 HKSCS 的, 包括假名 06/16 01:06
30F:→ uranusjr: 而 HKSCS 那部分其实是照抄古早的倚天系统用的编码表 06/16 01:08
再次感谢以上各位大大留言<(_ _)>
※ 编辑: aa4live (140.92.63.147), 06/16/2016 14:45:31
31F:→ alibuda174: 请问,你不管编码问题的作法,有成功转贴到ptt2吗? 06/16 21:17
32F:→ aa4live: 有成功喔! 06/17 00:09
33F:→ s860134: BBS 都是 BIG-UAO 编码,telnet 本身就是吃 byte 输入的 06/17 02:43