111,101
社区成员




using System;
using System.Collections.Generic;
using System.Text;
namespace EncodeChange
{
class Program
{
static void Main(string[] args)
{
while(true)
{
Console.WriteLine("/****请输入原始数据!****/");
string data=Console.ReadLine();
Console.WriteLine("/****转换后数据:****/");
Console.WriteLine(ChangeStr(data));
Console.WriteLine("\n");
}
}
private static string ChangeStr(string str)
{
return Utf8ToDefault(DefaultToUtf8(str));
}
private static string DefaultToUtf8(string str)
{
byte[] temp = Encoding.UTF8.GetBytes(str);
byte[] temp1 = Encoding.Convert(Encoding.Default, Encoding.UTF8, temp);
string result = Encoding.UTF8.GetString(temp1);
return result;
}
private static string Utf8ToDefault(string str)
{
byte[] temp = Encoding.Default.GetBytes(str);
byte[] temp1 = Encoding.Convert(Encoding.UTF8, Encoding.Default, temp);
string result = Encoding.Default.GetString(temp1);
return result;
}
}
}
private static string DefaultToUtf8(string str)
{
byte[] temp = Encoding.Default.GetBytes(str);
byte[] temp1 = Encoding.Convert(Encoding.Default, Encoding.UTF8, temp);
string result = Encoding.UTF8.GetString(temp1);
return result;
}
private static string Utf8ToDefault(string str)
{
byte[] temp = Encoding.UTF8.GetBytes(str);
byte[] temp1 = Encoding.Convert(Encoding.UTF8, Encoding.Default, temp);
string result = Encoding.Default.GetString(temp1);
return result;
}
[/quote]
对的,其实,这个需求是来自项目中遇到的问题,服务器传回的是utf8的字符串,是乱码,我需要将这个字符串转换为c#能识别的正常码。
其实我的项目只需要调用 Utf8ToDefault(string strWrong),strWrong是乱码,为了模拟这个乱码的产生,我引入了DefaultToUtf8(string strNormal) strNormal是正常的。
我纠结的是这两个方法看来是可逆的,为什么逆出来的结果不一样呢?
楼上所说的可能每个方法单独来讲都是可逆的,传入正常码都能回到正常码,我提出来的两个方法整体来看也应该是可逆的,即从第一个方法传入正常码,第二个方法应该也传回正常码,不应该有乱码才对。
private static string DefaultToUtf8(string str)
{
byte[] temp = Encoding.Default.GetBytes(str);
byte[] temp1 = Encoding.Convert(Encoding.Default, Encoding.UTF8, temp);
string result = Encoding.UTF8.GetString(temp1);
return result;
}
private static string Utf8ToDefault(string str)
{
byte[] temp = Encoding.UTF8.GetBytes(str);
byte[] temp1 = Encoding.Convert(Encoding.UTF8, Encoding.Default, temp);
string result = Encoding.Default.GetString(temp1);
return result;
}
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("/****请输入原始数据!****/");
string data = Console.ReadLine();
Console.WriteLine("/****转换后数据:****/");
Console.WriteLine(ChangeStr(data));
Console.WriteLine("\n");
}
}
private static string ChangeStr(string str)
{
return Utf8ToDefault(DefaultToUtf8(str));
}
private static string DefaultToUtf8(string str)
{
//byte[] temp = Encoding.UTF8.GetBytes(str);
byte[] temp = Encoding.Default.GetBytes(str);
//byte[] temp1 = Encoding.Convert(Encoding.UTF8, Encoding.Default, temp);
byte[] temp1 = Encoding.Convert(Encoding.Default, Encoding.UTF8, temp);
string result = Encoding.UTF8.GetString(temp1);
return result;
}
private static string Utf8ToDefault(string str)
{
byte[] temp = Encoding.UTF8.GetBytes(str);
//byte[] temp = Encoding.Default.GetBytes(str);
//byte[] temp1 = Encoding.Convert(Encoding.Default, Encoding.UTF8, temp);
byte[] temp1 = Encoding.Convert(Encoding.UTF8, Encoding.Default, temp);
string result = Encoding.Default.GetString(temp1);
return result;
}
你的写的有错误。