Windows Phone 7 中将Gb2312编码转换成UTF-8
相信大家在使用一些网站提供的API的时候会发现他们提供的API的编码是GB2312的,而wp7并不支持。
前一阵子我在做一个应用的时候也遇到了这个问题。群里的一个大大提供了两个类帮忙解决了这个问题。
/Files/Angle-Louis/GB2312相关的编码类.rar
那么如何使用这两个类呢?
比如您使用了Webclient从网络上获取资源,那么在Client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)函数中
byte[] txtBytes = StreamToBytes(e.Result);
Gb2312Encoding encoding = new Gb2312Encoding();
string str1 = encoding.GetString(txtBytes, 0, txtBytes.Length);
byte[] uftBytes = Encoding.UTF8.GetBytes(str1);
//System.Convert.FromBase64String(str1);
Stream utfStream = BytesToStream(uftBytes);
using (StreamReader UtfReader = new StreamReader(utfStream))
{
string Result = UtfReader.ReadToEnd();
//这里已经是Utf-8的编码了
}
Gb2312Encoding encoding = new Gb2312Encoding();
string str1 = encoding.GetString(txtBytes, 0, txtBytes.Length);
byte[] uftBytes = Encoding.UTF8.GetBytes(str1);
//System.Convert.FromBase64String(str1);
Stream utfStream = BytesToStream(uftBytes);
using (StreamReader UtfReader = new StreamReader(utfStream))
{
string Result = UtfReader.ReadToEnd();
//这里已经是Utf-8的编码了
}
public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
public Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
}
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
public Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
}
好了,这样就可以将GB2312编码转化成UTF-8编码了。