在C#

时间:2019-04-09 20:19:57

标签: c# encoding

我有一个文本文件,如果在记事本中打开,其内容将显示:

ʸ³ßÓÀ¼ª

如果将其拖动到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);      
    }

这仍然会给出很多错误的字符。有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您的方法接受一个string并返回另一个没有意义的stringSystem.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);