最近我在我的电脑上保存了一个文本文件,但是当我再次打开它时,我看到了一些字符串,如:
"˜ÌÇí ÍÑÝã ÚÌíÈå¿"
现在我想知道是否可以将其重新转换为原始文本(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);
答案 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