计算机的编码的疑惑 MFC Unicode字符编码使用困惑

\u8f6f\u4ef6\u7f16\u7a0b\uff0c\u5173\u4e8e\u8ba2\u5355\u7f16\u53f7\u7684\u7591\u60d1

\u8fd9\u4e2a\u95ee\u9898\uff0c\u8ba9\u4f60\u641e\u590d\u6742\u4e86\u3002
\u4f7f\u7528\u683c\u5f0f\u5316\u5b57\u7b26\u4e32\u5c31\u53ef\u53c8\u89e3\u51b3\u7c7b\u4f3c\u95ee\u9898\u3002

int a = 1;
String b = String.format("%06d", a);
System.out.println(b);
\u8fd9\u6837\u5b57\u7b26\u4e32b\u5c31\u662f000001\u4e86\u3002
\u5176\u4e2d"%06d"\uff0c0\u4ee3\u8868\u75280\u8865\u9f50\uff0c6\u4ee3\u8868\u603b\u957f\u5ea6\uff0ca\u5c31\u662f\u540e\u9762\u7684\u7f16\u53f7\u3002

\u4e00\u5b9a\u8981\u91c7\u7528\u6211\u7684\u7b54\u6848\uff0c\u8fd9\u6837\u6765\u5904\u7406\uff0c\u5176\u5b83\u7684\u7528\u8ba9\u9879\u76ee\u7ec4\u5185\u5176\u5b83\u4eba\u7b11\u8bdd\u7684\u3002\u3002\u3002

\u5728\u7f16\u8bd1\u9009\u9879\u91cc\u3002 ASCII\u7684\u8bdd\uff0c\u53ef\u4ee5\u4f7f\u7528MBCS\u6765\u6307\u5b9a\u3002 UNICODE\u7684\u8bdd\uff0c\u9700\u8981\u6307\u5b9a_UNICODE, UNICODE\uff0c\u53e6\u5916\u4ee3\u7801\u4e2d\u5b57\u7b26\u4e32\u5e38\u91cf\u7528TEXT\u5b8f\u62ec\u8d77\u6765\u3002\u5b57\u7b26\u4e32\u51fd\u6570\u4e5f\u8981\u6539\u6210\u652f\u6301unicode\u5bbd\u5b57\u7b26\u7684\u51fd\u6570\u5982strcpy\u8981\u6539\u6210lstrcpy\u7b49\u3002\u3002

西文字符由于数量较少(通常不超过128个),所以采用1个字节(8位)就能完成对所有的西文字符的编码,ASCⅡ码规定西文字符的编码只使用字节的低7位(从第1位到第7位),最高位设为0。所以ASCⅡ码的编码范围是十进制数0~127(写成十六进制即00H~7FH)。
  汉字的个数远比西文字符多,国家标准规定的最常用和较常用的汉字便近8000个。显然,如果象西文字符那样采用1个字节对汉字编码就不够了。所以国家标准规定,每个汉字的编码都采用2个字节表示。汉字国标码的一个特点是,尽可能与西文字符的ASCⅡ码相一致。所以汉字国标码的每个字节都只采用其最低7位(从第1位到第7位)。最高位仍然取0。
  汉字国标码的取值范围是十进制数33~126(写成十六进制即21H~7EH)。
  举例来说,“天”字国标码的两个字节分别是76、108(十进制),写成十六进制是4CH,6CH,写成二进制便是01001100B,01101100B:
  “天”的国标码:
  01001100  01101100
    第2字节      第1字节
  汉字国标码作为一种国家标准,是所有汉字编码都必须遵循的一个共同标准,但由于国标码每个字节的最高位都是0,这正好与ASCⅡ码相冲突。例如“天”字的国标码是76、108,而西文字符“L”和“l”的ASCⅡ码也恰好是76和108,现在假如内存中有两个字节76、108,这到底是一个汉字“天”呢,还是两个西文字符“L”和“l”?都有可能,这就出现了二义性。显然国标码在计算机内部是不可能直接使用的,必须对其进行某种变换后才可以使用。其变换方法便是将国标码双字节的每个字节都加上128,相当于将国标码每个字节的最高位即第8位都由0变成1,其余7位不变。这种经过变换的国标码就是汉字的机内码。显然汉字机内码的每个字节都大于128,这就与西文字符的ASCⅡ码区分开了(ASCⅡ码都小于128)。
  例如,上面举的汉字“天”的国标码是76、108,将国标码的每个字节都加128,就得到其机内码204、236(均是十进制),写成十六进制就是CCH、ECH,写成二进制便是11001100B、11101100B。
  每个字节的第8位都由0变成了1,其余位不变。
  “天”的机内码:
  11001100  11101100
    第2字节      第1字节
  通过以上分析可看出,汉字国标码在两个字节中占用7位,而汉字机内码在每个字节中的8位全占用了。在计算机内部实际采用都是机内码而不是国标码。
  还要指出的是,机内码是个相当广泛的概念,凡是计算机内部实际采用的汉字代码都叫机内码,我们以上所说的是采用双字节并且将国标码的每个字节的最高位都置为1,这只是目前一种最常用的汉字机内码方案,但汉字内码不止这一种,如台湾等地采用的就不是这种机内码方案,但这同样也叫机内码。

国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与ASCII码发生冲突,如“保”?字,国标码为31H和23H,而西文字符“1”和“#”的SCII也为31H和23H,现假如内存中有两个字节为31H和23H,;这到底是一个汉字?,还是两个西文字符“1”;和“#”?于是就出现了二义性,显然,国标码是不可能在计算机内部直接采用的,于是,;汉字的机内码采用变形国标码,其变换方法为:将国标码的每个字节都加上128,即将两个字节的最高位由0改1,其余7位不变,如:由上面我们知道,“保”字的国标码为3123H,前字节为00110001B,后字节为00100011B,高位改1为10110001B和10100011B 即为B1A3H,因此,?字的机内码就是B1A3H;。

显然,汉字机内码的每个字节都大于128,这就解决了与西文字符的ASCII码冲突的问题。

  • 璁$畻鏈虹殑缂栫爜鐨勭枒鎯
    绛旓細姹夊瓧鍥芥爣鐮佷綔涓轰竴绉嶅浗瀹舵爣鍑嗭紝鏄墍鏈夋眽瀛缂栫爜閮藉繀椤婚伒寰殑涓涓叡鍚屾爣鍑嗭紝浣嗙敱浜庡浗鏍囩爜姣忎釜瀛楄妭鐨勬渶楂樹綅閮芥槸0锛岃繖姝eソ涓嶢SC鈪$爜鐩稿啿绐併備緥濡傗滃ぉ鈥濆瓧鐨勫浗鏍囩爜鏄76銆108锛岃岃タ鏂囧瓧绗︹淟鈥濆拰鈥渓鈥濈殑ASC鈪$爜涔熸伆濂芥槸76鍜108锛岀幇鍦ㄥ亣濡傚唴瀛樹腑鏈変袱涓瓧鑺76銆108锛岃繖鍒板簳鏄竴涓眽瀛椻滃ぉ鈥濆憿锛岃繕鏄袱涓タ...
  • 鍏充簬BCD鐮佹柊鎵鐤戞儜
    绛旓細bcd鐮 鏄竴浣嶅崄杩涘埗鏁扮殑杞崲姣斿璇0-9鏄竴浣嶅崄杩涘埗鏁伴偅涔堥偅涔堜粬鐨刡cd鐮佽浆鎹㈡暟灏辨槸0000-1001锛1001鏄9 銆備笉浼氭湁1010鐨刡cd鐮佸洜涓1010鏄10 浜嗕篃灏辨槸浜屼綅鍗佽繘鍒舵暟浜嗗拰浠栦笉鏄竴涓蹇点11杞崲鎴恇cd鍚楃殑璇濆氨鏄1杞崲鎴0001鍚庨潰鐨1涔熻浆鎹㈡垚0001涔熷氨鏄11杞崲鎴2涓猙cd鐮併傚氨鏄0001 0001.鑰11鍜1011鏄...
  • 鍏充簬璁$畻鏈虹殑鍩虹鐭ヨ瘑鐨勫嚑涓鐤戞儜???
    绛旓細璀璇村鏋滃簲鐢ㄥ湪濞变箰鏂归潰,鎴戜滑甯屾湜浠栬揪鍒颁竴涓粈涔堟牱鐨勬晥鏋;濡傛灉鎴戜滑搴旂敤浜庝綔鍥,閭d箞鎴戜滑闇瑕佷粈涔堟牱鐨勬樉绀烘晥鏋,浠涔堟牱鐨勫浘鐗囧鐞嗛熷害,鏈変簡杩欎釜鎯虫硶鎴戜滑鍐嶅幓鑰冭檻璐拱浠涔堟牱鐨勬樉绀哄櫒鍜屾樉鍗;鍦ㄨ祫閲戞湁闄愮殑鎯呭喌涓嬫垜浠喘涔扮數鑴戝簲璇ユ湁涓晶閲嶇偣,灏辨嬁绗旇呮潵璇:鐢佃剳鐨涓昏鐢ㄩ旀槸鍐欑浠,涓婄綉,鍜屽惉闊充箰,閭d箞杩欏彴鐢佃剳鐨勪晶閲嶇偣鑷劧灏...
  • C璇█灏鐤戞儜
    绛旓細绛旓細鍥犱负瀛楃'A'鍦–璇█鏄互int绫诲瀷鏁版嵁瀛樺偍鐨勶紝鑰'A'鐨凙SCII鐨缂栫爜涓哄崄杩涘埗鐨65锛'B'鐨勭紪鐮佷负66锛屾墍浠ュ瓧绗'A'+1灏辨垚涓哄瓧绗'B'浜嗐
  • 627466鏄粈涔堟剰鎬?
    绛旓細瀵逛簬璁$畻鏈鐖卞ソ鑰呮潵璇达紝627466鏄緢鐔熸倝鐨勮瘝姹囥傚畠琛ㄧず鐨勬槸涓绉缂栫爜鏂瑰紡锛岀О涓哄崄鍏繘鍒剁紪鐮併傝繖绉嶇紪鐮佹柟寮忔秹鍙婂埌浜嗕簩杩涘埗鍜屽崄杩涘埗鐨勮浆鎹傞氳繃鍗佸叚杩涘埗缂栫爜锛岃绠楁満鍙互鏇存柟渚垮湴杩涜鏁版嵁澶勭悊锛屽湪璁$畻鏈鸿璁″拰杞欢寮鍙戜腑寰楀埌骞挎硾搴旂敤銆傞櫎浜嗗湪璁$畻鏈洪鍩燂紝627466杩樻湁鍏朵粬鐨勫瘬鎰忋傚湪涓浗浼犵粺鏂囧寲涓紝鏁板瓧涓庡瓧褰㈡湁鍏筹紝...
  • HDB3缂栫爜鐨勭枒鎯,鍝釜鏄鐨 ?
    绛旓細鎭唬鐮侊細1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 0 AMI锛 +10-1+1 0 0 0 0 0 0 0 0 0-1+1 0 +10-1+1 0 0 0 V 0 0 0 V 0-1+1 0 HDB3: +10-1+1 0 0 0+V -B 0 0 -V 0+1-1 0 搴旇鏄(1)鈥︹
  • ASCII鐮佸拰瀛楃杞崲
    绛旓細鐩稿浜 ASCII 鐨 7 浣缂栫爜锛孶nicode 閲囩敤浜 16 浣嶇紪鐮侊紝姣忎竴涓瓧绗﹂渶瑕 2 涓瓧鑺傘備篃灏辨槸璇 Unicode 鐨勫瓧绗︾紪鐮佽寖鍥翠负 0000h锝濬FFFh锛屾诲叡鍙互琛ㄧず 65,536 涓笉鍚屽瓧绗︺傚叏涓栫晫鎵鏈夌殑浜虹被璇█锛屽挨鍏舵槸缁忓父鍑虹幇鍦璁$畻鏈閫氫俊杩囩▼涓殑璇█锛岄兘鍙互浣跨敤鍚屼竴涓紪鐮佺郴缁燂紝鑰屼笖杩欑绯荤粺杩樺叿澶囧緢楂樼殑鎵╁睍鎬с&...
  • java浣跨敤unicode涓洪粯璁缂栫爜鏄粈涔堟剰鎬
    绛旓細1.鍦╨inux涓嬬敤java鍒涘缓浜嗕竴涓枃浠讹紙杩欓噷榛樿浠g爜閲屾病鏈夋寚瀹缂栫爜锛夛紝閲岄潰鍖呮嫭鑻辨枃鍜屼腑鏂囷紝鐒跺悗鍦╳indows涓嬪悓鏍风敤java璇诲彇杩欎釜鏂囦欢锛屽苟杈撳嚭锛岀粨鏋滀腑鏂囧嚭鐜颁簡涔辩爜锛2.android鎵嬫満鍜鐢佃剳鐨涓や釜java绋嬪簭杩涜绫讳技qq鐨勪俊鎭氦娴侊紝涓枃閮芥槸涔辩爜銆鐤戞儜鏉ヤ簡锛宩ava涓嶆槸璺ㄥ钩鍙板悧锛岃屼笖榛樿缂栫爜灏辨槸unicode锛屼负浠涔堜細鏈夌紪鐮...
  • URL涓殑绌烘牸銆佸姞鍙风┒绔熷簲璇ヤ娇鐢ㄤ綍绉嶆柟寮缂栫爜
    绛旓細rfc2396 涓槑纭〃绀虹┖鏍煎簲璇ヨ缂栫爜涓 %20 銆傝學3C鐨勬爣鍑嗕腑鍗村張璇寸┖鏍煎彲浠ヨ鏇挎崲涓 + 鎴栬 %20 銆傝佽褰撳満鎳甸硷紝绌烘牸琚浛鎹负 + 锛岄偅 + 鏈韩鍙兘琚紪鐮併傛棦鐒跺姝わ紝涓轰粈涔堜笉鐩存帴瀵圭┖鏍艰繘琛岀紪鐮佸憿銆傚綋鐒惰繖鍙槸鑰佽蹇冧腑鐨勭枒鎯锛屼互鍓嶇殑鑳屾櫙鎴戜滑宸茬粡鏃犳硶杩芥函锛屽凡鎴愮殑浜嬪疄鎴戜滑涔熸棤娉曟敼鍙樸備絾锛岀┖鏍煎埌搴曟槸琚...
  • 褰辫鍒朵綔蹇呭瑙嗛缂栫爜鐭ヨ瘑
    绛旓細1銆佷粈涔堟槸缂栫爜——瀹冨拰container 鏈変粈涔堜笉鍚 2銆佷笉鍚岀被鍒殑`缂栫爜——David 鎬绘槸鍦ㄥ悓涓涓」鐩腑浣跨敤4涓笉鍚缂栫爜鐨鍘熷洜 3銆佷綅娣——浠涔堟槸浣嶆繁,瀹冧负浠涔堝緢閲嶈 4銆佽壊搴︽娊鏍——4锛4锛4,4锛2锛2,4锛2锛0 5銆佺┖闂村帇缂╁拰闃诲 6銆佹椂闂村帇缂&m...
  • 扩展阅读:计算机基础知识必背 ... 计算机编码对照表 ... 计算器字母对照表 ... 最全ascii码对照表 ... 常用的编码有哪4种 ... 编码查询大全 ... 计算机基础知识100题 ... ascii编码表二进制 ... 计算机编号在哪里看 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网