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

时间:2018-05-25 15:54:31

标签: c# locale codepages

我有不同代码页的字符串: string multi =“EnglishРусский日本语”;

我需要返回代码页列表:

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

1 个答案:

答案 0 :(得分:1)

根据您的评论,您的问题似乎有所不同。

如果您只需要检查文件名(string)是否仅使用"默认代码页" (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;        
}

请注意,此代码可以进行优化。使用异常来检查字符串是否可以编码这一事实并不是最优的(但很容易编写:-))。更好的解决方案是继承EncoderFallback类。