在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ iOS/ NSString 與 Unicode
與四軸無(wú)人機(jī)的通訊
在沙盒中編寫腳本
結(jié)構(gòu)體和值類型
深入理解 CocoaPods
UICollectionView + UIKit 力學(xué)
NSString 與 Unicode
代碼簽名探析
測(cè)試
架構(gòu)
第二期-并發(fā)編程
Metal
自定義控件
iOS 中的行為
行為驅(qū)動(dòng)開(kāi)發(fā)
Collection View 動(dòng)畫
截圖測(cè)試
MVVM 介紹
使 Mac 應(yīng)用數(shù)據(jù)腳本化
一個(gè)完整的 Core Data 應(yīng)用
插件
字符串
為 iOS 建立 Travis CI
先進(jìn)的自動(dòng)布局工具箱
動(dòng)畫
為 iOS 7 重新設(shè)計(jì) App
XPC
從 NSURLConnection 到 NSURLSession
Core Data 網(wǎng)絡(luò)應(yīng)用實(shí)例
GPU 加速下的圖像處理
自定義 Core Data 遷移
子類
與調(diào)試器共舞 - LLDB 的華爾茲
圖片格式
并發(fā)編程:API 及挑戰(zhàn)
IP,TCP 和 HTTP
動(dòng)畫解釋
響應(yīng)式 Android 應(yīng)用
初識(shí) TextKit
客戶端
View-Layer 協(xié)作
回到 Mac
Android
Core Image 介紹
自定義 Formatters
Scene Kit
調(diào)試
項(xiàng)目介紹
Swift 的強(qiáng)大之處
測(cè)試并發(fā)程序
Android 通知中心
調(diào)試:案例學(xué)習(xí)
從 UIKit 到 AppKit
iOS 7 : 隱藏技巧和變通之道
安全
底層并發(fā) API
消息傳遞機(jī)制
更輕量的 View Controllers
用 SQLite 和 FMDB 替代 Core Data
字符串解析
終身學(xué)習(xí)的一代人
視頻
Playground 快速原型制作
Omni 內(nèi)部
同步數(shù)據(jù)
設(shè)計(jì)優(yōu)雅的移動(dòng)游戲
繪制像素到屏幕上
相機(jī)與照片
音頻 API 一覽
交互式動(dòng)畫
常見(jiàn)的后臺(tái)實(shí)踐
糟糕的測(cè)試
避免濫用單例
數(shù)據(jù)模型和模型對(duì)象
Core Data
字符串本地化
View Controller 轉(zhuǎn)場(chǎng)
照片框架
響應(yīng)式視圖
Square Register 中的擴(kuò)張
DTrace
基礎(chǔ)集合類
視頻工具箱和硬件加速
字符串渲染
讓東西變得不那么糟
游戲中的多點(diǎn)互聯(lián)
iCloud 和 Core Data
Views
虛擬音域 - 聲音設(shè)計(jì)的藝術(shù)
導(dǎo)航應(yīng)用
線程安全類的設(shè)計(jì)
置換測(cè)試: Mock, Stub 和其他
Build 工具
KVC 和 KVO
Core Image 和視頻
Android Intents
在 iOS 上捕獲視頻
四軸無(wú)人機(jī)項(xiàng)目
Mach-O 可執(zhí)行文件
UI 測(cè)試
值對(duì)象
活動(dòng)追蹤
依賴注入
Swift
項(xiàng)目管理
整潔的 Table View 代碼
Swift 方法的多面性
為什么今天安全仍然重要
Core Data 概述
Foundation
Swift 的函數(shù)式 API
iOS 7 的多任務(wù)
自定義 Collection View 布局
測(cè)試 View Controllers
訪談
收據(jù)驗(yàn)證
數(shù)據(jù)同步
自定義 ViewController 容器轉(zhuǎn)場(chǎng)
游戲
調(diào)試核對(duì)清單
View Controller 容器
學(xué)無(wú)止境
XCTest 測(cè)試實(shí)戰(zhàn)
iOS 7
Layer 中自定義屬性的動(dòng)畫
第一期-更輕量的 View Controllers
精通 iCloud 文檔存儲(chǔ)
代碼審查的藝術(shù):Dropbox 的故事
GPU 加速下的圖像視覺(jué)
Artsy
照片擴(kuò)展
理解 Scroll Views
使用 VIPER 構(gòu)建 iOS 應(yīng)用
Android 中的 SQLite 數(shù)據(jù)庫(kù)支持
Fetch 請(qǐng)求
導(dǎo)入大數(shù)據(jù)集
iOS 開(kāi)發(fā)者的 Android 第一課
iOS 上的相機(jī)捕捉
語(yǔ)言標(biāo)簽
同步案例學(xué)習(xí)
依賴注入和注解,為什么 Java 比你想象的要好
編譯器
基于 OpenCV 的人臉識(shí)別
玩轉(zhuǎn)字符串
相機(jī)工作原理
Build 過(guò)程

NSString 與 Unicode

當(dāng)你在處理文本時(shí),如果你不是在寫一些非常古老的代碼(legacy code),那么你一定要使用 Unicode。幸運(yùn)的是,蘋果和 NeXT 一直致力于推動(dòng) Unicode 標(biāo)準(zhǔn)的建立,而 NeXT 在 1994 年推出的 Foundation Kit 則是所有編程語(yǔ)言中最先基于 Unicode 的標(biāo)準(zhǔn)庫(kù)之一。但是,即使 NSString 完全支持 Unicode,還替你干了大部分的重活兒,處理各種語(yǔ)言、各種書寫系統(tǒng)的文本仍然是一個(gè)非常復(fù)雜的事情。作為一個(gè)程序員,有些事情你應(yīng)該知道。

這篇文章里,我會(huì)先向你簡(jiǎn)單地講一下 Unicode 這個(gè)標(biāo)準(zhǔn),然后解釋 NSString 是怎么處理它的,再討論一下你可能會(huì)遇到的一些常見(jiàn)問(wèn)題。

歷史

計(jì)算機(jī)沒(méi)法直接處理文本,它只和數(shù)字打交道。為了在計(jì)算機(jī)里用數(shù)字表示文本,我們指定了一個(gè)從字符到數(shù)字的映射。這個(gè)映射就叫做編碼(encoding)

最有名的一個(gè)字符編碼是 ASCII。ASCII 碼是 7 位的,它將英文字母,數(shù)字 0-9 以及一些標(biāo)點(diǎn)符號(hào)和控制字符映射為 0-127 這些整型。隨后,人們創(chuàng)造了許多不同的 8 位編碼來(lái)處理英語(yǔ)以外的其他語(yǔ)言。它們大多都是基于 ASCII 編碼的,并且使用了 ASCII 沒(méi)有使用的第 8 位來(lái)編入其它字母、符號(hào)甚至是整個(gè)字母表(比如西里爾字母和希臘字母)。

當(dāng)然,這些編碼系統(tǒng)相互之前并不兼容,并且,由于 8 位的空間對(duì)于歐洲的文字來(lái)說(shuō)都不夠,更不用說(shuō)全世界的書寫系統(tǒng)了,因此這種不兼容是肯定會(huì)出現(xiàn)的了。這對(duì)于當(dāng)時(shí)基于文本的操作系統(tǒng)來(lái)說(shuō)是很麻煩的,因?yàn)槟菚r(shí)操作系統(tǒng)只能同時(shí)使用一種編碼(也叫做內(nèi)碼表,code page)。如果你在一臺(tái)機(jī)器上寫了一段文字,然后在另一臺(tái)使用了不同的內(nèi)碼表的機(jī)器上打開(kāi),那么在 128-255 這個(gè)范圍內(nèi)的字符就會(huì)顯示錯(cuò)誤。

諸如中文、日文和韓文的東亞文字又讓情況更加復(fù)雜。這些書寫系統(tǒng)里包含的字符實(shí)在是太多了,以至于 8 位的數(shù)字所能提供的 256 個(gè)位置遠(yuǎn)遠(yuǎn)不夠。結(jié)果呢,人們開(kāi)發(fā)了更加通用的編碼(通常是 16 位的)。當(dāng)你開(kāi)始糾結(jié)于如何處理一個(gè)字節(jié)裝不下的值時(shí),如何把它存儲(chǔ)到內(nèi)存或者硬盤里就變得十分關(guān)鍵了。這時(shí),就必須再進(jìn)行第二次映射,以此來(lái)確定字節(jié)的順序。而且,最好使用可變長(zhǎng)度的編碼而不是固定長(zhǎng)度的。請(qǐng)注意,第二次映射其實(shí)是另一種形式的“編碼”。我們把這兩個(gè)映射都叫做“編碼”很容易造成誤解。這個(gè)在下面 UTF-8 和 UTF-16 的部分里會(huì)再作討論。

現(xiàn)代操作系統(tǒng)都已經(jīng)不再局限于只能同時(shí)使用一種內(nèi)碼表了,因此只要每個(gè)文檔都清楚地標(biāo)明自己使用的是哪種編碼,處理幾十甚至上百種編碼系統(tǒng)盡管很討厭,也完全是有可能的。真正不可能的是在一個(gè)文檔里_混合_使用多種編碼系統(tǒng),因此撰寫多語(yǔ)言的文檔也不可能了,而正是這一點(diǎn)終結(jié)了在 Unicode 編碼出現(xiàn)之前,多種編碼混戰(zhàn)的局面。

1987 年,來(lái)自幾個(gè)大的科技公司(其中包括蘋果和 NeXT)的工程師們開(kāi)始合作致力于開(kāi)發(fā)一種能在全世界所有書寫系統(tǒng)中通用的字符編碼系統(tǒng),于 1991 年 10 月發(fā)布的 1.0.0 版本的 Unicode 標(biāo)準(zhǔn)就是這一努力的成果。

Unicode 概要

基本介紹

簡(jiǎn)單地來(lái)說(shuō),Unicode 標(biāo)準(zhǔn)為世界上幾乎所有的1書寫系統(tǒng)里所使用的每一個(gè)字符或符號(hào)定義了一個(gè)唯一的數(shù)字。這個(gè)數(shù)字叫做碼點(diǎn)(code points),以 U+xxxx 這樣的格式寫成,格式里的 xxxx 代表四到六個(gè)十六進(jìn)制的數(shù)。比如,U+0041(十進(jìn)制是 65)這個(gè)碼點(diǎn)代表拉丁字母表(和 ASCII 一致)里的字母 A;U+1F61B 代表名為“伸出舌頭的臉”的 emoji,也就是

上一篇:Core Data下一篇:回到 Mac