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
800
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
ASTを使って影響範囲を特定する
nealle
0
140
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
610
GoにおけるFFIのこれまでとこれから
goccy
4
1.7k
Reactの設計論
uhyo
13
6.3k
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
1.3k
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
7
7.6k
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
3
2k
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
290
module Synths; end
asonas
1
130
GoCon2026 - Open Source, Open World
sanposhiho
2
960
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
120
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
310
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
The Language of Interfaces
destraynor
162
27k
Marketing to machines
jonoalderson
1
5.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Between Models and Reality
mayunak
4
450
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Cost Of JavaScript in 2023
addyosmani
55
10k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
The Invisible Side of Design
smashingmag
301
52k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
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