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