- RTC程序設計:實時音視頻權威指南
- 戴維
- 867字
- 2024-05-14 10:03:26
1.3.3 TextViewer
TextViewer展示了任意輸入文本的3種編碼方式:ANSI(GBK)、Unicode、UTF-8,如圖1-15所示。

圖1-15 TextViewer的界面
從Windows界面上讀到的字符串都是Unicode的。在早期沒有Unicode標準時,Windows系統使用ANSI字符集,在ANSI字符集下,英文采用ASCII編碼,漢字采用GBK編碼。為了進行ANSI與Unicode之間的轉換,我們使用了C++標準庫提供的wcstombs_s和mbstowcs_s,并封裝到了DXP類中。

注意這里的std::wstring在不同平臺下有著不同的字符寬度。Windows下wchar_t是2字節字符,macOS下wchar_t是4字節字符,它并不具備跨平臺的特性。
為了進行UTF-8字符集的轉換,我們封裝了一個DUTF8的類,提供了一些靜態方法,可以很方便地完成各類UTF-8的字符處理任務。

在RTC程序設計中,數據的傳輸要同時兼顧高效與跨平臺的需要,因此對于文本的內容,通常會使用UTF-8編碼。
有了對本節文本的深入理解,我們就可以將想要發出的信息用計算機編碼表示出來。然而,要將信息傳遞給對方,還必須借助于網絡,這將在下一節繼續介紹。
總結
英文字符的個數較少,使用一字節表示即可。漢字等亞洲文字需要使用兩個或更多字節,各國大都定義了自己的字符集。為了統一全球的文字編碼,Unicode標準應運而生。為了提高英文的傳輸效率,UTF-8編碼成為非常流行的文本編碼。
參考閱讀
1.《編碼的奧秘》(2000年),Charles Petzold著,伍衛國等譯。此書介紹了一些相當有趣的編碼歷史,例如盲文的編碼、ASCII碼的由來。
2.《計算機字符編碼——Unicode與Windows》(2016年),李建文著。書中列舉了所有Windows支持的Unicode字符。
3.UTF-8編碼的細節,參考RFC3629。
4.Bjoern Hoehrmann用C語言實現了UTF-8解碼器,可在線查閱Flexible and Economical UTF-8 Decoder。
練習題
1.[5分鐘](布萊葉盲文系統)路易斯·布萊葉(Louis Braille,1809—1852)于1824年創建了布萊葉盲文系統。該系統使用了64個碼字,使用凸起和平面區分1和0。請問該編碼表示一個字符需要多少個平凸?
2.[30分鐘](ASCII輸出)編寫一個程序,輸出每個ASCII碼位及其對應的符號。
3.[30分鐘](GBK字符數)編寫一個函數,實現輸入一個GBK字節流,輸出其中包含的GBK字符數。
4.[1小時](GB 18030)2000年3月,我國推出了GB 18030—2000標準,其字符集來自Unicode 3.0,包括27 533個字符。2005年11月,GB 18030—2005成為強制執行的標準,它來自Unicode 4.1,包括76 556個字符。上網查詢相關的標準內容,它們相對于GBK做了哪些改進。
- 軟件安全技術
- Python自然語言處理實戰:核心技術與算法
- PyQt從入門到精通
- HBase從入門到實戰
- Learning Firefox OS Application Development
- Java EE 7 Development with NetBeans 8
- 大模型RAG實戰:RAG原理、應用與系統構建
- 深入理解Android:Wi-Fi、NFC和GPS卷
- Android開發:從0到1 (清華開發者書庫)
- Corona SDK Mobile Game Development:Beginner's Guide(Second Edition)
- Visual C#.NET Web應用程序設計
- Vue.js應用測試
- Deep Learning with R Cookbook
- Python 3 Object:oriented Programming(Second Edition)
- FusionCharts Beginner’s Guide:The Official Guide for FusionCharts Suite