Pha*_*mer 35 .net c# string ascii utf-8
我在C#中进行了大量的字符串操作,并且确实需要将字符串存储为每个字符一个字节.这是因为我在内存中同时需要千兆字节的文本,这会导致内存问题.我确信这个文本永远不会包含非ASCII字符,所以对于我的目的,System.String和System.Char将每个字符存储为两个字节的事实既不必要又是一个真正的问题.
我即将开始编写自己的CharAscii和StringAscii类 - 字符串1基本上将其数据保存为byte [],并公开类似于System.String所做的字符串操作方法.然而,这似乎做了很多工作似乎是一个非常标准的问题,所以我真的在这里发帖,检查是否还没有更简单的解决方案.有没有例如我可以使System.String内部存储数据为UTF8,我没有注意到,或者其他方式解决问题?
Kei*_*thS 11
好吧,您可以创建一个包装器,将数据检索为UTF-8字节,并根据需要将片段转换为System.String,反之亦然,将字符串推回内存.Encoding类将帮助您:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
var myReturnedString = utf8.GetString(utfBytes);
Run Code Online (Sandbox Code Playgroud)
正如您所发现的,CLR使用UTF-16进行字符编码.您最好的选择可能是使用Encoding类和BitConverter来处理文本.这个问题在两种编码之间进行转换有一些很好的例子: