作者sdriver (日夜顛倒)
看板Linux
標題[問題] PTT編碼
時間Wed Aug 20 12:12:51 2014
其實不知道該發在哪個板…但我記得GOOGLE相關問題時有看過LINUX板的文章,
所以就發在這了
最近在寫個讀PTT資料的程式,光在登入畫面我就不行了,讀出來的都是亂碼。經過無數
小時的努力,才發現PTT是用BIG5-UAO編碼。好,知道編碼就行。還好網路上也找的到
BIG5-UAO轉UNICODE的表(跟英文比要找中文資料真是無敵超級難,而且感覺有隨時沒資
料的可能)。
第一個困難點是,當我一個byte一個byte讀登入畫面的資料時,發現ASCII
和BIG5-UAO是混在一串的,ASCII一個字是1 byte,BIG5-UAO一個字是2 bytes。
但還好他們二個低位元的數值沒有重覆(在表裡面是這樣的),我可以先只讀一個位元
來判斷目前的值是不是ASCII,如果是就直接顯示,不是的話就和下個位元合在一起去
查BIG5-UAO轉UNICODE的表。
但傷腦筋的來了,讀到後來資料裡竟然有不在BIG5-UAO也不是ASCII的位元,請問
我該怎麼辦? 這個怪東西是 0x50A1。難道我哪裡搞錯了嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 76.182.127.99
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Linux/M.1408507973.A.686.html
1F:推 filiaslayers: pcman是不是開源碼的?你可以翻一下他們的source 08/20 14:03
2F:→ filiaslayers: code去看他們怎麼處理這個問題 08/20 14:03
3F:→ Cypresslin: 我猜是一字雙色造成的 08/20 14:17
5F:推 soem: 一字雙色就是把BIG5的2byte之間插色碼... 08/20 21:10
6F:推 Tetralet: 那個編碼怪怪的是因為... 0x50 是 P 這個字?? 08/20 22:40
7F:推 prismwu: 你先用utf-8試試看 不行的話我再回文 最近剛好也遇過這個 08/20 22:53
8F:推 abcdefghi: 輸出0x50, 把0xa1和下一個byte合成big5 08/20 23:43
9F:→ abcdefghi: 懶人法, 直接用iconv/icu把big5字串轉成utf8字串 08/20 23:44
10F:→ carylorrk: ssh 上 PTT 的站出來! 08/21 00:47
11F:推 AceIan: ssh+1 08/21 11:52
12F:推 mstar: 不知道 pcmanx 能不能增加支援 ssh.... 08/21 12:07
13F:→ HamalAri: pcmanx 一直都支援 ssh ,只是要改設定檔 08/21 12:47
14F:推 Bencrie: ssh 連線跟密技一樣 XD 08/21 12:52
15F:推 ducktung: ssh+1 08/21 16:07
16F:推 redbxh: SSH+1 08/21 20:41
17F:推 mjsg: 當然用 ssh .. 08/22 02:46
18F:→ newversion: pietty +1 08/22 10:16
20F:推 mgdesigner: ssh++ 08/22 15:15
21F:推 carylorrk: 我覺得帳號後面打, 這個纔是密技吧,我現在才知道 XD 08/24 06:39
22F:推 ymzk: 登入時帳號後加',' 像你帳號原本sdriver改sdriver, 08/24 10:50
23F:→ ymzk: 進去後自然會變UTF-8 08/24 10:50
25F:推 prismwu: telnet當然是騙別人用(? 08/25 05:46