Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
工程師一定要懂的 Text Encoding
Search
Inndy
December 18, 2020
Technology
810
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
工程師一定要懂的 Text Encoding
Inndy
December 18, 2020
More Decks by Inndy
See All by Inndy
資訊安全:麻瓜的黑魔法防禦術
inndy
3
3.1k
HackmeCTF 平台背後的心酸血淚史
inndy
2
900
COSCUP 2018 Lightning Talk - 審稿好難,所以我們來寫程式吧
inndy
0
510
逆向工程:從入門到放棄
inndy
7
3.6k
HITCON 2017 Zeroday 發表會
inndy
0
1.4k
No More Crypto Fails
inndy
34
8.4k
你再共用密碼啊
inndy
1
800
CTF From Zero To One
inndy
5
5.3k
逆向工程基礎
inndy
4
1.5k
Other Decks in Technology
See All in Technology
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
310
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
7
3.6k
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
0
320
AI Agent入門〜今更聞けないAgentの話〜
hiromimaganuma
0
110
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
250
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
690
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
1.1k
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
160
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
2
1.5k
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
540
事業課題から技術的負債に向き合う
sansantech
PRO
2
2.3k
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
180
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
Building Flexible Design Systems
yeseniaperezcruz
330
41k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
480
Unsuck your backbone
ammeep
672
58k
Exploring anti-patterns in Rails
aemeredith
4
510
The browser strikes back
jonoalderson
0
1.7k
Mobile First: as difficult as doing things right
swwweet
225
10k
Faster Mobile Websites
deanohume
310
32k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
RailsConf 2023
tenderlove
30
1.6k
Transcript
Creative Commons 3.0 BY-NC-ND 工程師一定要懂的 Text Encoding 都 2 0
2 0 了 你 還 搞 不 懂 U n i c o d e 嗎 ? Inndy Lin /
[email protected]
奧義智慧 Proprietary and Confidential Information 電腦如何儲存文字?
Creative Commons 3.0 BY-NC-ND ASCII 編碼 ► ASCII 定義 0x00
~ 0x7F ► Printable 0x20 ~ 0x7e ► ' ': 0x20 ► A: 0x41 ► a: 0x61 ► Q: 轉換大小寫快速做法 ► Ans: c ^ 0x20
Creative Commons 3.0 BY-NC-ND ASCII Escape Character ► 0x00 ~
0x1F, 0x7F ► GUI 被發明/普及以前,用 Terminal 跟 Printer ► 為什麼 Windows ( CR LF / "\r\n" ) 換行跟 Linux ( LF "\n" ) 換行不一樣? ► CR 移動遊標到行頭 ► LF 移動遊標到下一行至於為什麼 Linux 只有 LF 我就不知道了 XD
奧義智慧 Proprietary and Confidential Information 歐洲人怎麼辦?
Creative Commons 3.0 BY-NC-ND Latin-1 編碼 ► ASCII 定義範圍 0x00
~ 0x7F ► E(xtended)ASCII 0x00 ~ 0xFF ► a.k.a. ► Latin-1 ► ISO/IEC 8859-1 ► CP 437 ► Python Hack: 用 latin1 編碼可以保存任何 binary data ► b"\x01\x02\x80\xff".decode("latin1")
奧義智慧 Proprietary and Confidential Information 亞洲人怎麼辦?
Creative Commons 3.0 BY-NC-ND CCCII, CSIC, CISCII, …??? Big5!!! ►
電腦發明後,臺灣自己做了幾套中文系統 ► 倚天中文系統、IBM 5550、王安碼 ► 細節我不清楚,畢竟時候我還沒出生 XD ► 資策會把廠商找來開會,指定出大五碼(五家廠商),也就是 Big5,後來也被香港採用 ► 後來 Big5 有改版,新增一些文字,Python 裡面的 Big5 是很早期的標準,所以會缺字 ► 中國自己做了 GBK ► 香港基於 Big5 做了 HKSCS ► Python Tips: 解碼中文請用 "big5-hkscs"
奧義智慧 Proprietary and Confidential Information 同一份文件要放 兩種語言要怎麼辦?
Creative Commons 3.0 BY-NC-ND Unicode! ► 1991 年制訂了 Unicode 1.0
► 除了各國文字外,也包含了 Emoji ► 2020/3 Unicode 13.0 Bubble Tea Emoji! → ► Windows NT: UCS-2 ► Windows XP: UTF-16 ► UTF-8 ► ASCII 的超集合,0x00 ~ 0x7f 相容與 ASCII ► RLE (Running Length Encode) ► 中文字通常佔 3bytes ⚫ 但是 Big5, UTF16 中文只要 2bytes
Creative Commons 3.0 BY-NC-ND Charset, Encoding? ► Charset 定義了有那些符號可以用(Character, Symbol)
► Encoding 是如何把 Character 儲存成 binary 的編碼方式 ► Big5 包含 Charset 以及 Encoding ► Unicode 是 Charset, UTF-8 是 Encoding ► UTF-16 其實有兩種,UTF-16LE, UTF-16BE ► BOM (Byte-Order Mark): 在檔案開頭放一個 U+FEFF 的 character ► PHP → Warning: Cannot modify header information – headers already sent
Creative Commons 3.0 BY-NC-ND Integer Encoding ► Little Endian ►
int a = 0x12345678; ► 在記憶體 / 檔案中: 78 56 34 12 ► UTF-16LE ► >>> chr(0x2266).encode('utf-16le').hex() ► '6622' ► >>> chr(0x2266).encode('utf-16').hex() # with BOM ► 'fffe6622'
Creative Commons 3.0 BY-NC-ND Unicode 編碼黑魔法 ► Unicode 的 Code
point 超過一個 char / wchar_t 的時候 ► UTF-8:一個中文字佔用 3 bytes,Emoji 佔用 4 bytes ► UTF-16 有時候會用 4bytes 表達一個 character
Creative Commons 3.0 BY-NC-ND Unicode - Surrogate Pairs
Creative Commons 3.0 BY-NC-ND 延伸閱讀 ► http://utf8everywhere.org/ ← 非常推薦 ►
https://www.meziantou.net/how-to-correctly-count-the-number-of-characters-of- a-string.htm ► https://github.com/tonsky/FiraCode ► https://speakerdeck.com/inndy/binary-processing
Creative Commons 3.0 BY-NC-ND 延伸閱讀 ► https://en.wikipedia.org/wiki/Unicode ► https://en.wikipedia.org/wiki/UTF-8 ►
https://en.wikipedia.org/wiki/UTF-16 ► https://en.wikipedia.org/wiki/Emoji ► https://en.wikipedia.org/wiki/Big5 ► https://en.wikipedia.org/wiki/Code_page_950
Creative Commons 3.0 BY-NC-ND 延伸閱讀 ► https://www.ptt.cc/bbs/Python/M.1467340705.A.2F5.html ► https://docs.python.org/3.5/library/codecs.html#standard-encodings