Судя по вашим комментариям, ваша проблема в другом.
Если вам нужно только проверить, использует ли имя файла (string
) только символы из "кодовой страницы по умолчанию" (Windows API используетЮникод плюс одна кодовая страница не в кодировке Юникод (это кодовая страница по умолчанию для программ, не поддерживающих Юникод), тогда это довольно просто.Encoding.Default
- это кодовая страница не-Unicode для Windows.
public static void Main()
{
Console.WriteLine(Encoding.Default.BodyName);
// I live in Italy, we use the Windows-1252 as the default codepage
Console.WriteLine(CanBeEncoded(Encoding.Default, "Hello world àèéìòù"));
Console.WriteLine(CanBeEncoded(Encoding.Default, "Русский"));
}
и интересный код:
public static bool CanBeEncoded(Encoding enc, string str)
{
// We want to modify the Encoding, so we have to clone it
enc = (Encoding)enc.Clone();
enc.EncoderFallback = new EncoderExceptionFallback();
try
{
enc.GetByteCount(str);
}
catch (EncoderFallbackException)
{
return false;
}
return true;
}
Обратите внимание, что этот код можно оптимизировать.Использование исключения для проверки того факта, что строка может быть закодирована, не оптимально (но ее легко написать :-)).Лучшим решением было бы создать подкласс класса EncoderFallback
.