当前位置: 代码迷 >> ASP.NET >> 是Framwork2.0的BUG还是 只是编码不同的有关问题,关于Encoding.Unicode.GetString的有关问题
  详细解决方案

是Framwork2.0的BUG还是 只是编码不同的有关问题,关于Encoding.Unicode.GetString的有关问题

热度:3942   发布时间:2013-02-26 00:00:00.0
是Framwork2.0的BUG还是 只是编码不同的问题,关于Encoding.Unicode.GetString的问题
byte[]   buffer   =   new   byte[]   {   221,   234,   146,   216,   150,   191   };
string   test   =   System.Text.Encoding.Unicode.GetString(buffer);
byte[]   buffer1   =   System.Text.Encoding.Unicode.GetBytes(test);
以上代码在.NET   2003中执行返回值正常,buffer跟buffer1的长度都为6
但是我今天转到.NET   2005时,发现Encoding.Unicode转换String跟byte时
会发生值丢失的情况,所以写以上代码测试,发现buffer的长度是6,但buffer1
的长度却是4,丢失了146跟216这两个值,这是什么问题啊,搞死我了,望赐教.


------解决方案--------------------------------------------------------
没碰到过,测试先
------解决方案--------------------------------------------------------
不是bug,你全部改為21看看
------解决方案--------------------------------------------------------
然後你全部改為221看看,維數變為多少?非可視字符在Unicode編碼裡被處理了。
------解决方案--------------------------------------------------------
用ASCII轉換吧:
byte[] buffer = new byte[] { 221, 234, 146, 216, 150, 191 };
string test = System.Text.Encoding.ASCII.GetString(buffer);
byte[] buffer1 = System.Text.Encoding.ASCII.GetBytes(test);
------解决方案--------------------------------------------------------
换个编码试下
------解决方案--------------------------------------------------------
我狂晕,不是任意字节都能转为字符编码再转回来的

你如果要实现任意字节转为字符串再转回,可以用Base64编码或转为16进制
------解决方案--------------------------------------------------------
遇到不可见字符就自动断了
------解决方案--------------------------------------------------------
//Base64编码
Convert.ToBase64String
Convert.FromBase64String
  相关解决方案