第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

WChars、編碼、標(biāo)準(zhǔn)和便攜性

WChars、編碼、標(biāo)準(zhǔn)和便攜性

C++
白衣非少年 2019-07-02 17:23:57
WChars、編碼、標(biāo)準(zhǔn)和便攜性下面的問題可能不符合要求,如果超出范圍,請隨時(shí)告訴我離開。這里的問題基本上是,“我是否正確地理解了C標(biāo)準(zhǔn),這是正確的方法嗎?”我想要求澄清、確認(rèn)和更正我對C中字符處理的理解(因此C+和C+0x)。首先,一個(gè)重要的觀察:可移植性和序列化是正交概念。便攜的東西就像C,unsigned int, wchar_t..可序列化的東西是這樣的uint32_t或者UTF-8?!翱梢浦病币馕吨梢栽诿總€(gè)受支持的平臺(tái)上重新編譯相同的源代碼并獲得工作結(jié)果,但是二進(jìn)制表示可能完全不同(甚至不存在,例如tcp對載體鴿子)。另一方面,可序列化的事物總是具有同表示,例如,我可以在Windows桌面、手機(jī)或牙刷上讀取的PNG文件。可移植的東西是內(nèi)部的,可串行化的東西處理I/O,便攜的東西是類型化的,可序列化的東西需要類型雙關(guān)語。</序言>談到C中的字符處理,有兩組內(nèi)容分別與可移植性和序列化相關(guān):wchar_t, setlocale(), mbsrtowcs()/wcsrtombs(): C標(biāo)準(zhǔn)對“編碼”只字不提。事實(shí)上,它對任何文本或編碼屬性都是完全不可知的。上面只寫著“你的切入點(diǎn)是main(int, char**);你得到了一個(gè)類型wchar_t它可以保存系統(tǒng)的所有字符;您可以獲得讀取輸入字符序列的函數(shù),并將它們轉(zhuǎn)換為可行的wstring,反之亦然。iconv()和UTF-8,16,32:在定義明確的固定編碼之間轉(zhuǎn)換代碼的函數(shù)/庫。ICov處理的所有編碼都是普遍理解和商定的,只有一個(gè)例外。C的可移植的、編碼不可知的世界與它之間的橋梁wchar_t可移植字符類型和確定性外部世界是WCHAR-T和UTF之間的ICUV轉(zhuǎn)換.因此,我應(yīng)該始終將字符串存儲(chǔ)在與編碼無關(guān)的wstring中嗎?wcsrtombs(),并使用iconv()為了序列化?概念上:                        my program    <-- wcstombs ---  /==============\   --- iconv(UTF8, WCHAR_T) -->CRT                   |   wchar_t[]  |                                <Disk>    --- mbstowcs -->  \==============/   <-- iconv(WCHAR_T, UTF8) ---                            |                            +-- iconv(WCHAR_T, UCS-4) --+                                                        |       ... <--- (adv. Unicode malarkey) ----- libicu ---+實(shí)際上,這意味著我會(huì)為我的程序入口點(diǎn)編寫兩個(gè)鍋爐板包裝器,例如C+:// Portable wmain()-wrapper#include <clocale>#include <cwchar>#include <string>#include <vector>這是使用純標(biāo)準(zhǔn)C/C+編寫一個(gè)慣用的、可移植的、通用的、與編碼無關(guān)的程序核心的正確方法嗎?(請注意,Unicode規(guī)范化或diacritic替換等問題超出了范圍;只有在您決定實(shí)際需要之后才能解決。Unicode(與你可能想要的任何其他編碼系統(tǒng)不同),現(xiàn)在是處理這些細(xì)節(jié)的時(shí)候了嗎,例如使用像libicu這樣的專用庫。)
查看完整描述

3 回答

?
森林海

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊

我會(huì)避開wchar_t輸入是因?yàn)樗蕾囉谄脚_(tái)(根據(jù)您的定義不是“可序列化的”):在Windows上輸入utf-16,在大多數(shù)類Unix系統(tǒng)上輸入U(xiǎn)TF-32。相反,使用char16_t和/或char32_t類型來自C+0x/c1x。(如果您沒有新的編譯器,請將它們設(shè)為uint16_tuint32_t)

定義在UTF-8、UTF-16和UTF-32函數(shù)之間轉(zhuǎn)換的函數(shù).

寫入重載窄/寬版本的每一,每個(gè)字符串函數(shù),就像WindowsAPI對-A和-W所做的那樣。采摘首選內(nèi)部使用的編碼,并堅(jiān)持使用。對于需要不同編碼的事物,根據(jù)需要進(jìn)行轉(zhuǎn)換。


查看完整回答
反對 回復(fù) 2019-07-02
?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

與.有關(guān)的問題wchar_t編碼無關(guān)的文本處理太困難了,應(yīng)該避免。如果像您所說的那樣堅(jiān)持使用“純C”,則可以使用所有w*像這樣的功能wcscat朋友們,但是如果你想做更復(fù)雜的事情,你就得跳進(jìn)深淵。

以下是一些困難得多的事情wchar_t如果你只選擇一個(gè)UTF編碼的話:

  • 解析Javascript:標(biāo)識(shí)符可以包含BMP之外的某些字符(假設(shè)您關(guān)心這種正確性)。

  • HTML:你怎么轉(zhuǎn)&#65536;變成一串wchar_t?

  • 文本編輯器:如何在wchar_t弦樂?

如果我知道字符串的編碼,我可以直接檢查字符。如果我不知道編碼,我必須希望,無論我想對字符串做什么,都是由某個(gè)庫函數(shù)實(shí)現(xiàn)的。所以wchar_t有點(diǎn)不相干,因?yàn)槲也徽J(rèn)為這是有用數(shù)據(jù)類型。

您的程序要求可能不同,而且wchar_t可能對你沒問題。


查看完整回答
反對 回復(fù) 2019-07-02
  • 3 回答
  • 0 關(guān)注
  • 392 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)