请教UCS2编码的字节数组如何转换转换成源来的数据?

C#技术
UCS2编码的字数组数据长度不限,字节数不固定(可能为4位,8位,10位,100位……),转换前肯定知道字节数组的长度。
请问如何转换?
[85 byte] By [djlgr-djl] at [2008-2-13]
# 1
是不是显分少啊? 不够可以再加啊!
djlgr-djl at 2007-10-23 > top of Msdn China Tech,移动平台,开发平台...
# 2
C#有和java类似的字符串转换类的,
就是System.Text.Encoding encoding = System.Text.GetEncoding("UTF-8");
然后用encoding.GetString(Byte[]);来转换成一个gb2312的字符串就可以啦。
至于用什么编码可以试一下吧,UCS2应该是unicode的,用utf-16试试?
# 3
老大,我这样试了一下,得到的是乱码?
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("UTF-16");
string recstr =encoding.GetString(byte[]);
那里错了?
djlgr-djl at 2007-10-23 > top of Msdn China Tech,移动平台,开发平台...
# 4
/// <summary>
/// 从ucs2转换到gb2312
/// </summary>
/// <param name="ucs2">ucs2编码数据</param>
/// <param name="gb2312">gb2312数据</param>
/// <returns></returns>
public static int UCS2ToGB2312(ref byte[] ucs2,int len)
{
int res=0;
byte tmp;

try
{
if(len%2==0 && len<=ucs2.Length)
{
int i=0;
while(i<len-1)
{
tmp=ucs2[i];
ucs2[i]=ucs2[i+1];
ucs2[i+1]=tmp;
i=i+2;
}
}
else
{
res=0;
}
}
catch(Exception e)
{
res=-1;
throw(e);
}
return(res);
}

接下来用:
msg=System.Text.Encoding.Unicode.GetString(ucs2);
matq2008-叶子.net at 2007-10-23 > top of Msdn China Tech,移动平台,开发平台...
# 5
String ct = new String(content,(encoding==8)?"UTF-16BE":"GBK");

encoding 就是对应Deliver包中的msgcoding字段
liusoft-红薯 at 2007-10-23 > top of Msdn China Tech,移动平台,开发平台...
# 6
失败,我这是JAVA的,没看清来添乱
liusoft-红薯 at 2007-10-23 > top of Msdn China Tech,移动平台,开发平台...
# 7
#.Net 里面实现字符的编码和解码——

#region 生成字符(含英文)引用码
/// <summary>
/// 生成unicode实体引用的wap字符串,所有汉字均由此转换
/// </summary>
/// <param name="s_Chinese">中文字符串,可夹英文</param>
/// <returns></returns>
protected string Gen_Unicode(string s_Chinese)
{
string s_retu="";
char[] c_chars=s_Chinese.ToCharArray();

for(int i=0;i<c_chars.Length;i++)
{
s_retu+="&#x" + ((short)c_chars[i]).ToString("X")+ ";";
}

return s_retu;
}
/// <summary>
/// 把 WAP 代码转换为字符(中文字符串,可夹英文)
/// </summary>
protected string Gen_Chinese(string s_Unicode)
{
string s_retu="";
string s1="";
string s2="";
byte[] array = new byte[2];
char []spar={';'};
string []chinese = s_Unicode.Split(spar);
int count=chinese.Length;
if(count>0)
{
for(int i=0;i<count;i++)
{
string s_tmp=chinese[i].Trim();
if(s_tmp!="")
{
// s_tmp=s_tmp.Substring(4);
if(s_tmp.Length>=4)
{
s1 = s_tmp.Substring(0,2);
s2 = s_tmp.Substring(2,2);
array[0] = (byte)Convert.ToInt32(s1,16);
array[1] = (byte)Convert.ToInt32(s2,16);
s_retu =s_retu + System.Text.Encoding.BigEndianUnicode.GetString(array);
}
else //英文的
{
// s1 = s_tmp.Substring(0,2);
s1 = "00";
s2 = s_tmp;
array[0] = (byte)Convert.ToInt32(s1,16);
array[1] = (byte)Convert.ToInt32(s2,16);
s_retu =s_retu + System.Text.Encoding.BigEndianUnicode.GetString(array);
}
}

}

}
return s_retu;
}
/// <summary>
/// 把字符转换为双字节的 hex
/// </summary>
/// <param name="s_Chinese">中文字符串,可夹英文</param>
protected string Gen_Hex(string s_Chinese)
{
string s_retu="";
char[] c_chars=s_Chinese.ToCharArray();

for(int i=0;i<c_chars.Length;i++)
{
string hex=((short)c_chars[i]).ToString("X");
if(hex.Length==2)//如果是单字节的则转换为双字节的字符
hex = "00" + hex;
s_retu+=hex;
}

return s_retu;
}
/// <summary>
/// 把 hex 代码转换为字符(中文字符串,可夹英文)
/// </summary>
protected string Gen_CharFromCode(string code)
{
string s = "";
for(int i=0;i<code.Length;i+=4)
{
string s1 = code.Substring(i,2);
string s2 = code.Substring(i+2,2);

int t1 = Convert.ToInt32(s1,16);
int t2 = Convert.ToInt32(s2,16);
byte[] array = new byte[2];

array[0] = (byte)t1;
array[1] = (byte)t2;

s += System.Text.Encoding.BigEndianUnicode.GetString(array);
}
return s;
}

#endregion

matq2008-叶子.net at 2007-10-23 > top of Msdn China Tech,移动平台,开发平台...