如何将"byte gdicharset"转换为脚本/语言的名称?

Eya*_*yal 0 .net c# internationalization character-encoding

C#中的FontDialog类具有一个属性"AllowScriptChange",允许用户选择脚本(西方,希伯来语,阿拉伯语,土耳其语等).启用后,下拉框会根据所选字体提供所有这些选项以及其他可用选项.

如果对话框成功,则所选字体的GdiCharSet设置为0-255之间的值.177是希伯来语,161是希腊语等.是否有一个将值从字符串转换为字符串的函数?我自己可以写一个switch语句,但我想做正确的方法.

这是部分列表:http://msdn.microsoft.com/en-us/library/cc194829.aspx

编辑:一个将从CharSet转换为代码页的函数也可以工作,因为我认为获取代码页的名称应该很容易.

Pau*_*l U 5

如果您不想使用交换机如何使用枚举?就像是:

public enum CharSet : byte
{
        ANSI_CHARSET = 0,
        DEFAULT_CHARSET = 1,
        SYMBOL_CHARSET = 2,
        SHIFTJIS_CHARSET = 128,
        HANGEUL_CHARSET = 129,
        HANGUL_CHARSET = 129,
        GB2312_CHARSET = 134,
        CHINESEBIG5_CHARSET = 136,
        OEM_CHARSET = 255,
        JOHAB_CHARSET = 130,
        HEBREW_CHARSET = 177,
        ARABIC_CHARSET = 178,
        GREEK_CHARSET = 161,
        TURKISH_CHARSET = 162,
        VIETNAMESE_CHARSET = 163,
        THAI_CHARSET = 222,
        EASTEUROPE_CHARSET = 238,
        RUSSIAN_CHARSET = 204
    }
Run Code Online (Sandbox Code Playgroud)

如果使用.NET 3.5,则可以设置扩展方法

public static class GdiCharHelper
{
    public static string ToGdiName(this byte GdiCharSet)
    {
            return Enum.GetName(typeof(CharSet), GdiCharSet);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以在你的代码中使用它,如下所示:

string name = Font.GdiCharSet.ToGdiName();
Run Code Online (Sandbox Code Playgroud)

编辑:现在我考虑一下,您应该将Extension方法的返回值更改为枚举,因此:

return (CharSet)GdiCharSet;
Run Code Online (Sandbox Code Playgroud)

这样你也可以比较:

If (Font.GdiCharSet.ToCharSet() == CharSet.ANSI_CHARSET) {...}
Run Code Online (Sandbox Code Playgroud)