Декодирование gb18030 в UTF8 в C # - PullRequest
1 голос
/ 09 апреля 2019

У меня есть текстовый файл, содержимое при открытии в блокноте показывает:

ʸ³ßÓÀ¼ª

Если я перетаскиваю его в браузер 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 Ответ

1 голос
/ 10 апреля 2019

Ваш метод принимает string и возвращает другое string, что не имеет смысла.System.String - это «вектор» кодовых единиц UTF-16.

Вы должны сделать:

using System.Text;
using System.IO;

// ...

  var str = File.ReadAllText(@"path\file.txt", Encoding.GetEncoding("GB18030"));

Пока str находится в памяти, оно имеет значение "矢尺永吉".Это не может быть "UTF-8", когда это строка .NET в памяти.Конечно, вы можете сохранить его в другом файле:

  File.WriteAllText(@"path\otherfile.txt", str, Encoding.UTF8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...