如何从字符串中获取代码页列表

How get list of codepages from string

我有不同代码页的字符串: 字符串多 = "EnglishРусский日本語";

我需要 return 代码页列表:

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

从您的评论来看,您的问题似乎有所不同。

如果您只需要检查文件名 (a string) 是否仅使用 "default codepage" 中的字符(Windows api 使用 unicode 加上单个非unicode代码页,即非unicode程序的默认代码页),那么就很简单了。 Encoding.Default 是 Windows 非 unicode 代码页。

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;        
}

请注意,此代码可以优化。使用异常来检查字符串可以被编码的事实并不是最佳的(但它很容易编写 :-) )。更好的解决方案是 class EncoderFallback class.