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这两个值,这是什么问题啊,搞死我了,望赐教.
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这两个值,这是什么问题啊,搞死我了,望赐教.
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);
Unicode怎么可以自作主张的处理掉我的非可视字符啊, 那我们转过来转过去岂不丢失了数
据了,有办法解决吗?
这样子过滤还不算问题吗? 那有什么办法做到不掉数据完成转换呢.
Convert.ToBase64String
Convert.FromBase64String
string str = BitConverter.ToString(byteArr);//转回byte数组
int len = (str.Length+1)/3
byte[] byteArr2 = new byte[len]
for(int i=0;i<len;i++)
{
byteArr2[i] = Convert.ToByte(str.Substring(i*3,2),16);
}
如果不是任何字符都可以转回来,为什么2003时又可以啊,我以前写了个简单的加密程序在一个
工程里面,加密后的Bytes用GetString转成字符,解密都没有问题的,如果到了2005 GetString
及GetBytes都会丢失我的数据的话,那我以前加密的数据怎么解密回来啊,那我不是永远也升不
到2005了,强烈鄙视微软的不负责任.
我当然知道用Base64可以解决这个问题,但是我以前加密的数据就没有办法解密了.
是不用换编码的,以前是用Unicode生成的,这回肯定也要用Unicode了我的加解密源码为:
/// <summary>
/// 功能:简单加解密字符串
/// </summary>
/// <param name="crypto">动作:R表示加密 H 表示解密</param>
/// <param name="crypta">要进行加,解密的字串</param>
/// <returns>
/// 返回:加或解密后的字符串
/// </returns>
public string Cryptogram(string crypto,string crypta)
{ if (crypta == null || crypta == string.Empty )
{
return crypta;
} string cryptg = null;
TripleDESCryptoServiceProvider triple = new TripleDESCryptoServiceProvider();
//Key 及IV就不公布了
byte[] cryptk = new byte[]{};
byte[] cryptiv = new byte[]{}; ICryptoTransform cryptf = null; switch(crypto[0])
{
case 'R':
cryptf = triple.CreateEncryptor(cryptk,cryptiv);
break;
case 'H':
cryptf = triple.CreateDecryptor(cryptk,cryptiv);
break;
} byte[] inputBuffer = Encoding.Unicode.GetBytes(crypta);
byte[] outputBuffer = cryptf.TransformFinalBlock(inputBuffer,0,inputBuffer.Length);
cryptg = Encoding.Unicode.GetString(outputBuffer,0,outputBuffer.Length);
return cryptg;
}
我2003中用Unicode.GetString得到的字串,到2005用Unicode.GetBytes都会丢失数据,
这还是正常的吗