官术网_书友最值得收藏!

1.3.3 TextViewer

TextViewer展示了任意輸入文本的3種編碼方式:ANSI(GBK)、Unicode、UTF-8,如圖1-15所示。

img

圖1-15 TextViewer的界面

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

img

注意這里的std::wstring在不同平臺下有著不同的字符寬度。Windows下wchar_t是2字節字符,macOS下wchar_t是4字節字符,它并不具備跨平臺的特性。

為了進行UTF-8字符集的轉換,我們封裝了一個DUTF8的類,提供了一些靜態方法,可以很方便地完成各類UTF-8的字符處理任務。

img

在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做了哪些改進。

主站蜘蛛池模板: 庆城县| 阳西县| 桂阳县| 乐清市| 樟树市| 红安县| 乐清市| 鄱阳县| 印江| 铜山县| 海晏县| 万荣县| 泰兴市| 泉州市| 阳高县| 万载县| 临沭县| 彰化县| 松桃| 千阳县| 山东| 巴中市| 安塞县| 湾仔区| 克东县| 娱乐| 红河县| 诏安县| 锦屏县| 金湖县| 新郑市| 建平县| 阳山县| 云浮市| 饶平县| 普格县| 吐鲁番市| 南乐县| 宾阳县| 南充市| 云安县|