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

How to convert saved text file encoding to UTF8?

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

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

现在我想知道是否可以将其重新转换为原始文本 (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);

您可以使用类似的东西:

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

字符串并没有真正解码...它的 bytes 只是 "enlarged" 到 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

略有不同