Encoding 是System.Text 命名空间下面的一个类,顾名思义,它是字符编码相关的一个类。因为在.NET平台上我们最多用的字符串,以及字符型都是UNICODE编码方式的,因此处理对象也多以UNICODE字符串为主。
这个类有大概40个方法,具体可查MSDN,其中有5 个是静态方法可以由 Encoding 类来直接调用,但其实这5个是最不常用的方法:
平常更容易看见的却是:
那这个Default 又是什么东西呢,原来它是 Encoding 类的一个静态 Property 它的类型仍然是Encoding 类,那这儿莫非是用了个Singlinton模式么? i dont know...
public static Encoding Default { get; }
所以,上面那些除5个静态方法以外的方法,就要通过这种方式 System.Text.Encoding.Default.XXXX 来调用。
另外同样,既然能 string 转 byte[] ,那当然也能byte[] 转 string 了:
接着看下面的情况:
string s = "test!";
byte[] byteArray = Encoding.Default.GetBytes(s);
Console.WriteLine(byteArray.Length);
foreach (byte b in byteArray)
{
Console.WriteLine(b);
}
如上这段代码,得到BYTE[]的长度是 5 ,我本来想当然地以为会是10呢,因为UNICODE的一个字符编码要占两个字节,但事实上Length这个属性输出的东西是数组的元素个数,并非它的实际字节长度。
可问题是既然一个UNICODE字符要2个字节才能存储,那它的二进制值也必然要大于byte所能容纳的一个字节呀,一一对应的话,如果那个字符的UNICODE值太大,溢出了byte的容纳范围,(众所周知,byte 的聚会范围仅是0-255)会怎么样呢???????为什么要将string 类型转换成 byte[] 呢??????
我将上面的string 换了一下:
string s = "我test!";
这次,输出长度为7!也就是说最前面的这个汉字用了两个byte来存储,而后面的仍然是一个字符一个byte。也就是说,一个字符串,被转换成byte[]时,内部进行了优化的,避免了不必要的内存分配。这点一定要有明确的意识!!!!!!
还要进一步注意的是,如果按下面这种方式显式要求得到一个UNICODE编码的byte[]的话,得到的就是真正的两byte一字符的结果了:
Encoding uni = Encoding.Unicode;
byte[] ba = uni.GetBytes(s);
Console.WriteLine(ba.Length); // 这次的结果是 12
foreach (byte b in ba)
{
Console.WriteLine(b);
}
对比一下两次的输出结果:
206
210
116
101
115
116
33
17
98
116
0
101
0
115
0
116
0
33
0
还是差异很大呀,不注意估计要出问题。
石家庄网站建设的优点:我们是专属定制,制作符合您公司业务、风格的网站,这就做到给您制作的网站是网络上独一无二的网站,这样更有利于搜索引擎的收录。如果您喜欢网络上某个风格的网站或者网站模板,我们是只仿制而不直接套用,我们会对其中的结构和样式做增减优化,做…
竞价排名营销是一种通过 竞价购买搜索引擎中关键词或关键短语的广告方式。竞价排名营销分为两种类型。 第一种,直接为真正的搜索引擎结果的排名付费,也就是说付的钱越多,网页所获得的排名名也就越高。 第二种则更类似于普通的广告。这种竞价排名营销方式通过…
网站优化对网站来说是非常重要的,直接决定和影响着网站所起到的作用,以及在各个地方当中的排名。在进行seo优化的过程中,我们必须要坚持一定的原则,真正的把这些事情做得更好,才可以确保最终的结果,这对于我们来说是非常重要的事。 SEO优化主要分为8小步: …