一個(gè)字節(jié)和一個(gè)字符(至少是*尼克斯)有什么區(qū)別?
我知道任何字符都是由一個(gè)或多個(gè)byte/s組成的。如果我沒有弄錯(cuò)的話,至少在*nix操作系統(tǒng)中,一個(gè)字符通常(或完全?)會(huì)只由一個(gè)字節(jié)組成。字節(jié)和字符之間有什么
解答動(dòng)態(tài)
A字節(jié)定義為8位。位是一個(gè)二進(jìn)制數(shù)字(即基本的1或0,是所有數(shù)字計(jì)算的基礎(chǔ)),
A字符通常是一個(gè)字節(jié),在某些上下文中(例如ASCII)可以定義為一個(gè)字節(jié)的長度。但是,Unicode、UTF-8和UTF-16定義了擴(kuò)展字符集,其中單個(gè)字符(或glyph)可以由長度超過一個(gè)字節(jié)的數(shù)據(jù)有效負(fù)載定義字符:
Q???????????????????
是單個(gè)字符,但它是用Unicode編碼的,通過對(duì)基本標(biāo)志符號(hào)(簡單的Q)應(yīng)用多個(gè)重音符號(hào)(或變音符號(hào))來實(shí)現(xiàn)的。這種編碼的長度比一個(gè)字節(jié)長得多:只將該字符放入一個(gè)文件中,并在我的語言環(huán)境中用hexdump而不是cat來顯示內(nèi)容產(chǎn)量:
$hexdump-C demo00000000 51立方厘米b4立方厘米91立方厘米8d立方厘米89立方厘米86立方厘米89 cd 9d cdQ……………..000000 10 9b cc 91 cc 95 cc 82 cc aa cc 98 cc b3 cc a3 cc
………..000000 20 a2 cc 9e cc a9 cc aa 0a
………..000000 28
重點(diǎn)強(qiáng)調(diào)我的:
3.87 CharacterA表示單個(gè)圖形符號(hào)或控制代碼的一個(gè)或多個(gè)字節(jié)的序列。實(shí)際上,確切的含義取決于實(shí)際的語言環(huán)境,例如在“C”語言環(huán)境下,printf'\xc3\xa4\xc3\xb6'wc-m給出4,因?yàn)樗行У赜?jì)算字節(jié);而在UTF-8語言環(huán)境下給出2,因?yàn)檫@是兩個(gè)UTF-8編碼字符??。假設(shè)您的終端也被設(shè)置為UTF-8,那么您當(dāng)然可以只編寫printf'??'。
(注意wc-c被定義為計(jì)數(shù)字節(jié),而不是字符,這已經(jīng)足夠令人困惑了。)
更糟的是,字符支持也取決于實(shí)用程序,并且不是所有的程序都能干凈地處理多字節(jié)字符(更不用說Unicode的所有怪癖了)。E、 gnutr處理字節(jié),不管它的手冊(cè)頁是什么說明:
$printftr
xy;echox$printf?tr
xy;echox
第一個(gè)字節(jié)與tr'\303\244''xy'相同,因此?的兩個(gè)字節(jié)都被替換,而第二個(gè)字節(jié)的發(fā)生是因?yàn)?和?的第一個(gè)字節(jié)相同。當(dāng)然,如果它真的處理字符,那么應(yīng)該打印x和?.
- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請(qǐng)您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請(qǐng)咨詢專業(yè)人士處理。