Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
工程師一定要懂的 Text Encoding
Search
Inndy
December 18, 2020
Technology
770
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
870
COSCUP 2018 Lightning Talk - 審稿好難,所以我們來寫程式吧
inndy
0
500
逆向工程:從入門到放棄
inndy
7
3.6k
HITCON 2017 Zeroday 發表會
inndy
0
1.4k
No More Crypto Fails
inndy
34
8.3k
你再共用密碼啊
inndy
1
800
CTF From Zero To One
inndy
5
5.3k
逆向工程基礎
inndy
4
1.5k
Other Decks in Technology
See All in Technology
なぜ Platform Engineering の土台に Kubernetes を選ぶのか
r4ynode
2
640
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
190
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
190
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
140
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
390
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
370
20260619 私の日常業務での生成 AI 活用
masaruogura
1
210
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
120
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.4k
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
480
自律型AIエージェントは何を破壊するのか
kojira
0
160
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
140
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
Paper Plane
katiecoart
PRO
1
51k
Building Adaptive Systems
keathley
44
3.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
First, design no harm
axbom
PRO
2
1.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
The Language of Interfaces
destraynor
162
27k
Design in an AI World
tapps
1
240
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
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