检索当前文化的所有大写字母

时间:2014-03-20 11:03:54

标签: c# .net cultureinfo

我知道有CultureInfo.TextInfo.ToUpper()但是,有没有办法检索给定文化的所有大写字母的集合?

请注意,我只想获得当前语言字母表的所有大写字母。例如。对于en-US我希望获得列表A,B,C,...Y,Z(订单实际上并不重要)。

3 个答案:

答案 0 :(得分:2)

.NET中没有内置数据库来跟踪特定语言字母表中出现的字母。这将是一个非常大的。而一个有争议的国家,即使是一个像荷兰语这样简单字母的国家也有发言者不同意Ÿ有向字是否在字母表中以及它出现在什么位置。前南斯拉夫有两个字母,战争已经过去了。瑞典在不久前加入了W,并被万维网强行推行。对于像中文和韩文这样的语言来说,这是一个相当不实用的方法。

想要在一般情况下解决这个问题。

答案 1 :(得分:1)

根据你对大写字母的实际定义,它们中有很多,只是在Invariant文化中,更不用说其他文件了,它根据你的操作系统而有所不同。

根据我的定义,这个LinqPad查询列出了973(在Win8.1上,873在Vista上,673在XP上)大写字符,这是char对ToUpperInvariant不变量不变的到ToLowerInvariant

var UppercaseChars = from i in Enumerable.Range(0, 65536)
                    let c = (char)i
                    let u = Char.ToUpperInvariant(c)
                    let l = Char.ToLowerInvariant(c)
                    where c == u && u != l
                    select c;
UppercaseChars.Count().Dump();
String.Join(" ", UppercaseChars).Dump();

<子> The LinqPad query

显然,您可以将其更改为使用CultureInfo.TextInfo.ToUpper.ToLower来获取任何可用文化的列表。

注意我的大写字母“定义”错过33个字符(在Win8.1上,在Vista上为135,在XP上为 306 ),由Unicode类别调用大写,但没有小写替代方案(根据ToLowerInvariant)。但是,它还包含 69个字符(在Win8.1上,在Vista上为71,在XP上为42),但未被Unicode类别定义为UppercaseLetter,但仍然具有小写替代(同样根据{ {1}})。后者是Unicode类别TitlecaseLetter(不是在XP中),LetterNumber和OtherSymbol中的部分字符。 Vista实际上包含Unicode类别 LowercaseLetter (ῃῳⱥⱦ)中的4个字符。

答案 2 :(得分:0)

要实际回答您的问题以及您在评论中的问题:根据Unicode类别“数据库”获取大写字符的位置是Char.GetUnicodeCategory。实际的数据库不能以任何其他有用的方式公开访问。

作为参考,您可以看到前255个条目here;其余的已加载here并查找here

请记住,大写的定义可能与Unicode不同,正如我在其他答案中提到的那样。