byte[] b1={120,218,179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206};
string str1 = (new UnicodeEncoding()).GetString(b1);
byte[] b2 = (new UnicodeEncoding()).GetBytes(str1);
执行之后b2的值为:
{179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206}
为什么b1和b2不等呢?
string str1 = (new UnicodeEncoding()).GetString(b1);
byte[] b2 = (new UnicodeEncoding()).GetBytes(str1);
执行之后b2的值为:
{179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206}
为什么b1和b2不等呢?
我这不一样!首先数组长度就不一样!不知为何!
没看错,不信你可以试试!
转换之后,就少了两个!
你换成
byte[] b1={120,218,179,97,136,100,240,96,136,103,240,101,112,102,176,99,80,97,249,206};
string str1 = System.Text.Encoding.Unicode.GetString(b1);
byte[] b2 = System.Text.Encoding.Unicode.GetBytes(str1);试试还少不?
byte[] b1 = { 120, 218, 179, 97, 136, 100, 240, 96, 136, 103, 240, 101, 112, 102, 176, 99, 80, 97, 249, 206 };
string str1 = (new UnicodeEncoding()).GetString(b1);
byte[] b2 = (new UnicodeEncoding()).GetBytes(str1);
if (b1.Length == b2.Length)
MessageBox.Show("一样");
else
MessageBox.Show("不一样");
有解决办法吗?
楼长写的是Unicode编码 b1的所有编码都能表示的
但是b1==b2=false
这个是我这里的结果
b1.Length=20,b2.Length=20,元素一样。
但是b1==b2=false
这个是我这里的结果
______
是不能这样比较的b1 和 b2 已经不是基础类型 而是引用类型
你这样比较的是引用 而不是内容
b2 is a Array
b1 == b2 ====>false;
数组能这么比较么?
用DBCSCodePageEncoding就可以了转化了...
byte[] b1 ={ 120, 218, 179, 97, 136, 100, 240, 96, 136, 103, 240, 101, 112, 102, 176, 99, 80, 97, 249, 206 };
string str1 = Encoding.Default.GetString(b1);
byte[] b2 = Encoding.Default.GetBytes(str1);
char[] c1=new char[b1.Length];
for(int i=0;i<b1.Length;i++)
c1[i]=(char)b1[i];
string str1=new string(c1);
char[] c2=str1.ToCharArray();
byte[] b2=new byte[c2.Length];
for(int i=0;i<c2.Length;i++)
b2[i]=(byte)c2[i];
//手动写的 再少就是程序有问题了
public static byte[] CompressText(string strSource) //压缩
{
MemoryStream mMemory = new MemoryStream();
byte[] byteSource = (new UnicodeEncoding()).GetBytes(strSource);
Deflater mDeflater = new Deflater(ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION);
ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream mStream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream(mMemory, mDeflater, 131072);
mStream.Write(byteSource, 0, byteSource.Length);
mStream.Close();
byte[] byteDest = mMemory.ToArray();
return byteDest;
} private void button3_Click(object sender, EventArgs e)
{ string str = "中华人民共和国";
byte[] b1 = CompressText(str);
string str1 = System.Text.Encoding.Default.GetString(b1);
byte[] b2 = System.Text.Encoding.Default.GetBytes(str1); if (b1.Length == b2.Length)
MessageBox.Show("一样");
else
MessageBox.Show("不一样");
} 我的目的就是把字符串先压缩成byte数组,然后把byte数组转成字符串,再解开,可是在转成字符串的环节上出了问题!
就你上面的例子可以使用 System.Text.Encoding.BigEndianUnicode和System.Text.Encoding.Default进行转换
/*b2[0] = 120;
b2[1] = 218;*/ //打开这段代码后,同样出现楼主的问题,证明 120,218不是一个正确的unicode格式,导致系统找不到一个符合的字符
string str1 = (new UnicodeEncoding()).GetString(b2);
byte[] b1 = (new UnicodeEncoding()).GetBytes(str1);