[問題] telnetlib文字編碼問題(python3)

作者: aa4live (Horse)   2016-06-14 09:26:19
各位前備好
近日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是不會停止後報錯
但是貼出來的文都變成亂碼
請問這種狀況有解法嗎?
謝謝!
作者: alibuda174 (阿哩不達)   2016-06-14 09:40:00
錯誤訊息?嗯,開檔時加上參數errors='ignore'捨棄那些字元吧要不然就要自己轉換
作者: kaichan   2016-06-14 11:45:00
可以試一下 "cp950" 而不是 "big5"。像「碁」這個字 cp950 可以轉,big5 不能轉你的這個字也可以用 cp950。 "\u2554".encode('cp950')
作者: uranusjr (←這人是超級笨蛋)   2016-06-14 12:50:00
如果是 BBS 的話通常用 big5-hkscs 可以搞定其實關鍵是你的檔案本身是用什麼編碼存的...CP950 確實不含日文, 我覺得你應該先確實知道它用的編碼最簡單的方法裝個 chardet 就可以試著偵測
作者: os653   2016-06-14 20:25:00
cp950 不含日文沒錯,你有灌 Unicode 補完計畫?有灌的話在 console 能顯示日文,但是是會有問題的日文
作者: eight0 (欸XD)   2016-06-14 23:39:00
作者: alibuda174 (阿哩不達)   2016-06-15 09:45:00
可以直接提供檔案嗎?
作者: uranusjr (←這人是超級笨蛋)   2016-06-15 12:08:00
這個檔案我用 Big 5 HKSCS 可以正常顯示
作者: alibuda174 (阿哩不達)   2016-06-15 15:46:00
請問為什麼你的檔案編碼是Big5-HKSCS?香港人?
作者: eight0 (欸XD)   2016-06-15 16:26:00
話說既然 tn.write 吃 bytes,直接把檔案讀成 bin 再餵給它就行了吧?
作者: s860134 (s860134)   2016-06-16 00:10:00
印象中 Big 5 HKSCS 與 Big5-UAO 有些關聯但是你說要轉貼到PTT2 用 eight0 的方法應該蠻不錯的不要嘗試去 encode 直接 byte 寫 byte 讀
作者: uranusjr (←這人是超級笨蛋)   2016-06-16 01:06:00
s860134: UAO 有一部分編碼是照抄 HKSCS 的, 包括假名而 HKSCS 那部分其實是照抄古早的倚天系統用的編碼表
作者: alibuda174 (阿哩不達)   2016-06-16 21:17:00
請問,你不管編碼問題的作法,有成功轉貼到ptt2嗎?
作者: aa4live (Horse)   2016-06-17 00:09:00
有成功喔!
作者: s860134 (s860134)   2016-06-17 02:43:00
BBS 都是 BIG-UAO 編碼,telnet 本身就是吃 byte 輸入的

Links booklink

Contact Us: admin [ a t ] ucptt.com