Вы должны войти, чтобы создавать сообщения и темы.

Класс INIManager не воспринимает кириллицу [Решено]

Всем привет! Использую в своей програмке вот такой класс:

Спойлер

//Класс для чтения/записи INI-файлов
public class INIManager
{
    //Конструктор, принимающий путь к INI-файлу
    public INIManager(string aPath)
    {
        path = aPath;
    }
    //Конструктор без аргументов (путь к INI-файлу нужно будет задать отдельно)
    public INIManager() : this("") { }
    //Возвращает значение из INI-файла (по указанным секции и ключу) 
    public string GetPrivateString(string aSection, string aKey)
    {
        //Для получения значения
        StringBuilder buffer = new StringBuilder(SIZE);

        //Получить значение в buffer
        GetPrivateString(aSection, aKey, null, buffer, SIZE, path);

        //Вернуть полученное значение
        return buffer.ToString();
    }
    //Пишет значение в INI-файл (по указанным секции и ключу) 
    public void WritePrivateString(string aSection, string aKey, string aValue)
    {
        //Записать значение в INI-файл
        WritePrivateString(aSection, aKey, aValue, path);
    }
    //Возвращает или устанавливает путь к INI файлу
    public string Path { get { return path; } set { path = value; } }
    //Поля класса
    private const int SIZE = 1024; //Максимальный размер (для чтения значения из файла)
    private string path = null; //Для хранения пути к INI-файлу
    //Импорт функции GetPrivateProfileString (для чтения значений) из библиотеки kernel32.dll
    [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString")]
    private static extern int GetPrivateString(string section, string key, string def, StringBuilder buffer, int size, string path);
    //Импорт функции WritePrivateProfileString (для записи значений) из библиотеки kernel32.dll
    [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString")]
    private static extern int WritePrivateString(string section, string key, string str, string path);
}

public static INIManager manager = new INIManager(Path.Combine(Application.StartupPath, "setting.ini"));

Все нормально работает, но не воспринимает кириллицу, то есть если пишу что-то по-русски в файле settings.ini, то на выходе получаю крякозябры, латиницу же воспринимает как надо, если кто шарит подскажите пожалуйста как сделать что бы и кириллицу воспринимало.

Лайкнул Zalexanninev15
Zalexanninev15

Добрый день.
С телефона тяжело понять, что там к чему в коде, но точно нужно разбираться с кодировкой (win-1251/utf8) файла .ini и/или в самой программе. Информации по работе с кириллическими кодировками в гугле много, т.к. это частая проблема.

Лайкнул Максим
Максим
Цитата: Adler от 09.10.2020, 18:16

Добрый день.
С телефона тяжело понять, что там к чему в коле, но точно нужно разбираться с кодировкой (win-1251/utf8) файла .ini и/или в самой программе.

Спасибо, не думал что так просто решится, преобразовал кодировку файла в ANSI и все заработало, спасибо большое ))

Лайкнул Zalexanninev15
Zalexanninev15