我知道有CultureInfo.TextInfo.ToUpper()
但是,有没有办法检索给定文化的所有大写字母的集合?
请注意,我只想获得当前语言字母表的所有大写字母。例如。对于en-US
我希望获得列表A,B,C,...Y,Z
(订单实际上并不重要)。
答案 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)