星空网 > 软件开发 > ASP.net

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

不知道你是否有过和我一样的疑问,不同编码的字符串是如何存储在运行时的内存中的呢,计算机在操作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,微软一定有它的道理。只是我不清楚。




原标题:C#中string在内存中是如何表示的

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

shopee重复刊登产品_常见的重复刊登类别:https://www.goluckyvip.com/news/1401.html
12点聊电商:盒马三城试点新举措:商品降价及免运费门槛提升 :https://www.goluckyvip.com/news/140146.html
盒马三城试点新举措:商品降价及免运费门槛提升 :https://www.goluckyvip.com/news/140147.html
​TikTokShort Film竞赛正式启动,并向美国创作者开放:https://www.goluckyvip.com/news/140148.html
突发!Sora占领TikTok!涨粉10万!商家倍感焦虑 巨头一夜未眠 :https://www.goluckyvip.com/news/140149.html
TikTok推出全新达人IP项目 进一步提升品牌达人营销效率 :https://www.goluckyvip.com/news/140150.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
中国有哪些著名的酒店品牌。:https://www.vstour.cn/a/411242.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流