我有不同代码页的字符串: string multi =“EnglishРусский日本语”;
我需要返回代码页列表:
int[] GetCodePage(string multi)
{
return new int[] {1252, 1251, 932};
}
答案 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
类。