Как получить список кодовых страниц из строки - PullRequest
0 голосов
/ 25 мая 2018

У меня есть строка с разными кодовыми страницами: string multi = "EnglishРусский 日本語";

Мне нужно вернуть список кодовых страниц:

int[] GetCodePage(string multi)
{
   return new int[] {1252, 1251, 932};
}

1 Ответ

0 голосов
/ 25 мая 2018

Судя по вашим комментариям, ваша проблема в другом.

Если вам нужно только проверить, использует ли имя файла (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.

...