国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中string在內存中是如何表示的

2019-11-14 13:42:52
字體:
來源:轉載
供稿:網友

不知道你是否有過和我一樣的疑問,不同編碼的字符串是如何存儲在運行時的內存中的呢,計算機在操作string類型的對象時,如何知道這個string是什么編碼呢?和文本文件那樣有類似BOM的東東在string對象里?

答案是,內存中是無關編碼的。統一使用UCS2(注意,這里為什么不說是UTF16,見下文)編碼(大小端應該是和計算機CPU有關,intel的應該是小端)存放在內存中。

string對象和IO交互時,分別根據方法中的Encoding去處理來自IO的字節,或者轉換成Encoding所指示的編碼的字節流作為IO輸出。

另外,上文提到內存中使用的是UCS2而不是UTF16,意思是,對于Unicode編碼值大于0xFFFF的編碼,C#和java一樣,是轉換成“代理對”(2*2字節)表示的。所以,如果string中含有類似emoji那樣的“大”字符時,string的Length方法返回的字符串長度是不正確的。解決方案是,使用StringInfo類中的LengthInTextElements。

 PS:System.Text.Encoding中的Unicode和BigEndianUnicode實際是UTF16,微軟一定有它的道理。只是我不清楚。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陕西省| 应城市| 阿勒泰市| 汤原县| 九龙坡区| 和顺县| 綦江县| 嘉峪关市| 临汾市| 嘉定区| 盐津县| 建昌县| 车致| 东兰县| 阳谷县| 古田县| 金平| 湟源县| 多伦县| 建德市| 万盛区| 武川县| 长沙市| 高邑县| 湘阴县| 临洮县| 石楼县| 清水河县| 金华市| 通许县| 孟州市| 长春市| 和田市| 巫山县| 利川市| 平罗县| 正镶白旗| 修水县| 七台河市| 巴彦县| 霍城县|