如何从字符串中获取代码页列表
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.
我有不同代码页的字符串: 字符串多 = "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.