我有一个文本文件,如果在记事本中打开,其内容将显示:
ʸ³ßÓÀ¼ª
如果将其拖动到chrome浏览器中,它将自动解码并正确显示为
矢尺永吉
经过一些研究,文件中的代码使用gb18030进行了编码。我正在尝试用C#进行转换。下面是我的代码:
public static string codeCovert(string s)
{
Encoding gb18 = Encoding.GetEncoding("gb18030");
Encoding Utf8 = Encoding.UTF8;
byte[] gbcode = gb18.GetBytes(s);
return Utf8.GetString(gbcode);
}
这仍然会给出很多错误的字符。有人可以帮忙吗?谢谢。
答案 0 :(得分:1)
您的方法接受一个string
并返回另一个没有意义的string
。 System.String
是UTF-16代码单元的“向量”。
您应该这样做:
using System.Text;
using System.IO;
// ...
var str = File.ReadAllText(@"path\file.txt", Encoding.GetEncoding("GB18030"));
str
在内存中时,其值为"矢尺永吉"
。当它是内存中的.NET字符串时,不能为“ UTF-8”。您当然可以将其保存到另一个文件中:
File.WriteAllText(@"path\otherfile.txt", str, Encoding.UTF8);