如何将保存的文本文件编码转换为UTF8?

时间:2015-06-19 11:48:06

标签: c#-4.0 encode

最近我在我的电脑上保存了一个文本文件,但是当我再次打开它时,我看到了一些字符串,如:

 "˜ÌÇí ÍÑÝã ÚÌíÈå¿"

现在我想知道是否可以将其重新转换为原始文本(UTF8)?

我尝试使用此代码,但它不起作用

  string tempStr="˜ÌÇí ÍÑÝã ÚÌíÈå¿"; 
  Encoding ANSI = Encoding.GetEncoding(1256);
  byte[] ansiBytes = ANSI.GetBytes(tempStr);
  byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes);
  String utf8String = Encoding.UTF8.GetString(utf8Bytes);

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

string str = Encoding.GetEncoding(1256).GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(tempStr))

该字符串未被真正解码...其byte s简单地"放大"到char,例如:

byte[] bytes = ...
char[] chars = new char[bytes.Length];
for (int i = 0; i < bytes.Length; i++)
{
    chars[i] = bytes[i];
}
string str = new string(chars);

现在......此转换与代码页ISO-8859-1完成的转换相同。所以我可以简单地反过来,或者我可以使用该代码页为我做,我选择了第二个。

Encoding.GetEncoding("iso-8859-1").GetBytes(tempStr)

这给了我原来的byte[]

然后我做了一些测试,看起来开头的文字不是UTF8,它在codepage 1256,这是一个阿拉伯语代码页。所以我

string str = Encoding.GetEncoding(1256).GetString(...);

唯一的问题是˜似乎不是原始字符串的一部分。

还有另一种可能性:

string str = Encoding.GetEncoding(1256).GetString(Encoding.GetEncoding(1252).GetBytes(tempStr));

代码页1252是在美国和欧洲大部分地区使用的代码页。如果您将Windows配置为英语,则很有可能将1252用作默认代码页。结果与使用iso-8859-1

略有不同