Класс INIManager не воспринимает кириллицу [Решено]
Цитата: Максим от 09.10.2020, 18:09Всем привет! Использую в своей програмке вот такой класс:
[spoiler=Код 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"));[/spoiler]
Все нормально работает, но не воспринимает кириллицу, то есть если пишу что-то по-русски в файле settings.ini, то на выходе получаю крякозябры, латиницу же воспринимает как надо, если кто шарит подскажите пожалуйста как сделать что бы и кириллицу воспринимало.
Всем привет! Использую в своей програмке вот такой класс:
//Класс для чтения/записи 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, то на выходе получаю крякозябры, латиницу же воспринимает как надо, если кто шарит подскажите пожалуйста как сделать что бы и кириллицу воспринимало.
Цитата: Adler от 09.10.2020, 18:16Добрый день.
С телефона тяжело понять, что там к чему в коде, но точно нужно разбираться с кодировкой (win-1251/utf8) файла .ini и/или в самой программе. Информации по работе с кириллическими кодировками в гугле много, т.к. это частая проблема.
Добрый день.
С телефона тяжело понять, что там к чему в коде, но точно нужно разбираться с кодировкой (win-1251/utf8) файла .ini и/или в самой программе. Информации по работе с кириллическими кодировками в гугле много, т.к. это частая проблема.
Цитата: Максим от 09.10.2020, 18:23Цитата: Adler от 09.10.2020, 18:16Добрый день.
С телефона тяжело понять, что там к чему в коле, но точно нужно разбираться с кодировкой (win-1251/utf8) файла .ini и/или в самой программе.Спасибо, не думал что так просто решится, преобразовал кодировку файла в ANSI и все заработало, спасибо большое ))
Цитата: Adler от 09.10.2020, 18:16Добрый день.
С телефона тяжело понять, что там к чему в коле, но точно нужно разбираться с кодировкой (win-1251/utf8) файла .ini и/или в самой программе.
Спасибо, не думал что так просто решится, преобразовал кодировку файла в ANSI и все заработало, спасибо большое ))