Как определить кодировку для корректной записи текста кириллицей в файл на хостинге?
Приложение asp.net core 5. Хостинг reg.ru, ОС Windows.
Создаю файл txt на хостинге и пишу в него текст. В тексте есть как латиница, так и кириллица:
public static void WriteFile(string str, string path, string nameFile, string typeFile, string newpath)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
DirectoryInfo dirInfo = new DirectoryInfo(path);
DirectoryInfo newFolder = dirInfo.Parent.CreateSubdirectory(newpath);
if (!newFolder.Exists)
{
newFolder.Create();
}
string fullPath = String.Format(@"{0}\{1}.{2}", newFolder.FullName, nameFile, typeFile);
// This text is added only once to the file.
try
{
if (!File.Exists(fullPath))
{
using (StreamWriter writer = new StreamWriter(fullPath, false, Encoding.GetEncoding("Windows-1251")))
{
writer.WriteLine(str);
}
}
else
{
using (StreamWriter writer = new StreamWriter(fullPath, true, Encoding.GetEncoding("Windows-1251")))
{
writer.WriteLine(str);
}
}
}
catch { }
}
Латиница и цифры записываются норм, а вот все что кириллицей знаками вопроса - ??????.
Какую кодировку следует указать для корректной записи текста кириллицей и латиницей?
Попробовал указать UTF8 - не помогло:
using (StreamWriter writer = new StreamWriter(fullPath, true, Encoding.UTF8))
{
writer.WriteLine(str);
}
Ответы (1 шт):
Encoding.UTF8 при указании для StreamWriter - это UTF-8 с BOM. А надо "без BOM". Чтобы получилось, можно просто не указывать кодировку. По умолчанию используется именно UTF-8 без BOM, ну либо вот так new UTF8Encoding(false) вместо Encoding.UTF8. Используйте ее и при записи, и при чтении.
Еще вот пример, как верно раскодировать неверно раскодированное. И закопайте 1251 туда, где вы ее откопали. Эта кодировка давно устарела вместе с Windows XP.