JAVA代码
String s = new String("20090717永强1".getBytes(),"8859_1");
.NET代码写了下
byte[] bs= System.Text.Encoding.Default.GetBytes("20090717永强1");
string s= System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(bs);
经过这样转换后bs.length的长度和str.length的长度一致,可str中显示的是乱码。
经过以后函数转换后,字符串显示正常,可长度发生了变化,本人需要拆解"20090717永强1"中的数据,需要用到Substring函数,所以需要转换后的长度和GetBytes获得的长度一致,请问各位如何解决,谢谢
Code
/// <summary>
/// 将ISO-8859-1编码转换成GB2312
/// </summary>
/// <param name="srcString">要转换的字符串</param>
/// <param name="dstEncode">原先的字符编码</param>
/// <returns></returns>
public static string ConvertISO88591ToEncoding(string srcString, Encoding dstEncode)
{
string sResult;
Encoding ISO88591Encoding = Encoding.GetEncoding("ISO-8859-1");
Encoding GB2312Encoding = Encoding.GetEncoding("gb2312"); //这个地方很特殊,必须利用GB2312编码
byte[] srcBytes = ISO88591Encoding.GetBytes(srcString);
//将原本存储ISO-8859-1的字节数组当成GB2312转换成目标编码(关键步骤)
byte[] dstBytes = Encoding.Convert(GB2312Encoding, dstEncode, srcBytes);
char[] dstChars = new char[dstEncode.GetCharCount(dstBytes, 0, dstBytes.Length)];
dstEncode.GetChars(dstBytes, 0, dstBytes.Length, dstChars, 0);//利用char数组存储字符
sResult = new string(dstChars);
return sResult;
}