Kevin Durant 左膝一受傷,在 PTT 上就多了個新外號「鬮鶦S」,什麼呀?
原始文章: https://www.ptt.cc/bbs/NBA/M.1488419159.A.3D1.html
快笑死了。 XDD
這是個複製貼上掉資料的結果。「杜蘭特」三個字在電腦裡的 Big5 編碼是:
杜 = '\xa7\xf9'
蘭 = '\xc4\xf5'
特 = '\xaf\x53'
這裡 \x 是 16 進位的的意思。每個字兩個位元,合起來是 '\xa7\xf9\xc4\xf5\xaf\x53'
複製貼上時不小心掉了第一個位元,變成 '\xf9\xc4\xf5\xaf\x53'。電腦在解讀這串字的時候,就把前兩個位元當成第一個字,中間兩個位元當成第二個字:
'\xf9\xc4' = 鬮
'\xf5\xaf' = 鶦
'\x53' = S
就這樣成了「鬮鶦S」。
鬮 = 鬥龜,他在雷霆時的前隊友 Russel Westbrook 在 PTT 上的外號是什麼?忍者龜。
鶦 = 胡鳥,他在雷霆時的前隊友 James Harden 在 PTT 上的外號是什麼?鬍子。
一個名字裡雷霆三少全出現,想不紅也難!哈哈哈哈~~~
笑完後還是要來打破砂鍋問個為什麼。追根究底,PTT 仍在使用 Big5 編碼也是原因之一。
>>> print kevin_big5.decode('big5')
杜蘭特
>>> print kevin_big5[1:].decode('big5') # 跳過第一個位元
鬮鶦S
如果是用 Unicode 的 UTF-8 編碼,一樣掉第一個位元,結果就只是杜字變成兩塊豆腐,不會影響後面的字。
>>> print kevin_utf8
杜蘭特
>>> print kevin_utf8[1:] # 跳過第一個位元
��蘭特
這是因為 UTF-8 有防錯設計,很容易分辨第一個位元和後續位元,代價是要用比較多空間表示中文字,杜蘭特三個字各用了三個位元,杜字的第一位元掉了,電腦看到兩個沒頭沒腦的後續位元,就顯示成豆腐,但後面的蘭字就不會錯了。
PTT 會改用 Unicode 嗎?
2017年3月14日
一個神奇的偶然: Kevin Durant 的新外號「鬮鶦S」
Labels:
中文
,
kevin durant
,
ptt
,
unicode
訂閱:
張貼留言
(
Atom
)
登入 PTT 時,在 ID 結尾處多加上一個逗號(,)的話,就會進入 UTF-8 模式。
回覆刪除秘技!!!學到了。 m(_._)m
刪除顯然貼文的人也不知道這招。
這功能我寫的,時光飛逝,十幾年都過去了 orz
刪除哇,第一次聽到有這功能。太秘技了吧!
刪除另一個方法是 ssh bbsu@ptt.cc 這樣也會進 UTF-8 模式……
回覆刪除竟然有這種祕技,這樣不用改terminal編碼就能直接連ptt?
刪除「笑完後還是要來打破砂鍋問個為什麼。追根究底,PPT 仍在使用 Big5 編碼也是原因之一。」
回覆刪除PTT 打太多次結果打成 PPT 了嗎 XD
眼力真好!已修正。 :D
刪除Big5 的雙色中文字怎麼轉換成 UTF-8?
回覆刪除顏色不是用 terminal 控制碼控制的嗎?雙色不會是左右不同色吧? @_@
刪除無聊
回覆刪除PTT 不轉過去的主要難點確實是雙色字,那個確實是一個全形字左右邊不同色,所以只限 DBCS 字元才能做,
回覆刪除例如如果要把"杜"字左邊塗紅色右邊塗綠色就要用 "*[31m?*[32m?" 其中前一個 ? 是 \xa7, 後一個 ? 是 \xf9。
(這個兩半邊不是照字型分,是照半型字空間在分,也就是利用等寬字體的 terminal 著色機制做成的兩邊不同色。)
這個技巧大量的在 ANSI 圖裡使用,所以轉過去圖基本上就爛光了。
(用 bbsu 上線就可以看到爛掉的進站圖)
一些比較小的問題還有 Unicode 本身對一些 Big5 裡的雙寬字定義成不定寬或單寬字的問題。
(例如希臘字母/西里爾字母是單寬,表格字元是不定寬等等,但 Big5 全部當它們是雙寬字)
這會造成對於假設雙位元組字都是雙寬字的排版造成問題。
然後其實 PTT 現在已經是 de facto 的 Big5-UAO 了 (遠目)
這個又可以扯一篇所以先在此打住。