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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C+11中字符串文字的Unicode編碼

C+11中字符串文字的Unicode編碼

C++
哆啦的時光機 2019-07-10 15:51:43
C+11中字符串文字的Unicode編碼跟隨相關(guān)問題,我想問一下C+11中的新字符和字符串文字類型?,F(xiàn)在看來,我們有四種字符和五種字符串文字。字符類型:char     a =  '\x30';         // character, no semanticswchar_t  b = L'\xFFEF';       // wide character, no semanticschar16_t c = u'\u00F6';       // 16-bit, assumed UTF16?char32_t d = U'\U0010FFFF';   // 32-bit, assumed UCS-4和字符串文字:char     A[] =  "Hello\x0A";         // byte string, "narrow encoding"wchar_t  B[] = L"Hell\xF6\x0A";      // wide string, impl-def'd encodingchar16_t C[] = u"Hell\u00F6";        // (1)char32_t D[] = U"Hell\U000000F6\U0010FFFF"; // (2)auto     E[] = u8"\u00F6\U0010FFFF"; // (3)問題是:\x/\u/\U字符引用可與所有字符串類型自由組合?是否所有字符串類型都是固定寬度的,即數(shù)組包含的元素與文字中顯示的元素相同,或者\x/\u/\U引用被擴展成一個可變的字節(jié)數(shù)?做u""和u8""字符串具有編碼語義,例如,我可以說char16_t x[] = u"\U0010FFFF",而非BMP碼點被編碼成兩個單元的UTF 16序列?也同樣適用于u8?在(1)中,我可以用\u?最后,是否有任何編碼字符串函數(shù)(即它們是字符感知的,并且可以檢測無效的字節(jié)序列)?這是一個開放的問題,但我想盡可能完整地了解新的C+11的新UTF編碼和類型工具。
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

\x/\u/\u字符引用可以與所有字符串類型自由組合嗎?

沒有。\x可以用于任何事情,但是\u\U只能在特定UTF編碼的字符串中使用。但是,對于任何UTF編碼的字符串,\u\U你認(rèn)為合適就可以使用。

是否所有字符串類型都是固定寬度的,即數(shù)組包含的元素與文字中所顯示的一樣多,還是將\x/\u/\u引用展開成一個可變的字節(jié)數(shù)?

不是你的意思。\x\u,和\U基于字符串編碼進行轉(zhuǎn)換。這些“代碼單位”的數(shù)量(使用Unicode術(shù)語)。一個char16_t是一個UTF-16代碼單元)值取決于包含字符串的編碼。文字u8"\u1024"將創(chuàng)建包含2的字符串。charS加上空終止符。文字u"\u1024"將創(chuàng)建包含1的字符串。char16_t加上一個空終止符。

使用的代碼單元數(shù)基于Unicode編碼。

u“和U8”字符串是否具有編碼語義,例如,是否可以說char16tx[]=u“\u0010FFFF”,而非BMP編碼點被編碼成兩個單元的UTF 16序列?

u""創(chuàng)建一個UTF-16編碼字符串。u8""創(chuàng)建一個UTF-8編碼字符串。它們將按照Unicode規(guī)范進行編碼。

在(1)中,我可以用\u寫單獨的代孕詞嗎?

絕對不是。該規(guī)范明確禁止使用utf-16代理項對(0xD8000xDFff)作為代碼點。\u\U.

最后,是否有任何編碼字符串函數(shù)(即它們是字符感知的,并且可以檢測無效的字節(jié)序列)?

絕對不是。好吧,請允許我換個說法。

std::basic_string不處理Unicode編碼。他們當(dāng)然可以商店被編碼的字符串。但他們只能把它們看作是charchar16_t,或char32_t他們不能把它們看作是用特定機制編碼的Unicode碼點序列。basic_string::length()將返回代碼單位的數(shù)量,而不是代碼點。顯然,C標(biāo)準(zhǔn)庫字符串函數(shù)是完全無用的。

但是,應(yīng)該注意的是,Unicode字符串的“長度”并不意味著代碼點的數(shù)量。一些代碼點正在組合“字符”(一個不幸的名稱),這與以前的代碼點結(jié)合在一起。因此,多個編碼點可以映射到單個視覺字符。

實際上,IoStreams可以讀寫Unicode編碼的值。要做到這一點,您必須使用區(qū)域設(shè)置來指定編碼,并將其正確地注入到不同的位置。這說起來容易做起來難,而且我沒有任何代碼向你展示如何做到這一點。


查看完整回答
反對 回復(fù) 2019-07-10
?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

在C11中,\x不能與任何東西一起使用,例如U+1F984將不能使用\x前綴,并且\u\U不能與ASCII控制字符一起使用,至少在Clang中是這樣。

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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