4

在 .NET 中,我需要(如果可能)区分不同类型的日语数字字符串。

在日语中,数字字符串可以用不同的方式书写,例如,半角字符中"1""1""ⅰ""Ⅰ"、 。"①"

我需要比较和之类的字符串"MyString1""MyString①"并且由于明显的原因它们不相等。我想知道是否有一种方法可以自动将"①"类型字符更改为"1"自动?

编辑

我知道显而易见的答案是列出所有可能的“①”类型字符(这些字符的数量是有限的)并在目标字符串中替换它们。但在我看来,这不是一种非常“好”的方式,也不是很健壮......所以如果有一种通用的方式,我宁愿使用它。

编辑

抱歉,我之前写过那个机器人"①"并且"1"被认为是数字,但它们不是。IsNumeric"①"出现为假。所以我想除了使用直接替换之外,实际上可能根本没有办法从一个切换到另一个。

4

2 回答 2

4

fileformat.info告诉我,带圆圈的数字可以分解为常规数字。在 ideone中对此进行研究表明,将在 .NET 中实现这一目标的规范化形式是 KC 或 KD:

var one  = "①";
Console.WriteLine(one);

Console.WriteLine(one.Normalize(NormalizationForm.FormC)); // ①
Console.WriteLine(one.Normalize(NormalizationForm.FormD)); // ①

Console.WriteLine(one.Normalize(NormalizationForm.FormKC)); // 1
Console.WriteLine(one.Normalize(NormalizationForm.FormKD)); // 1

也就是说,需要注意的是,规范化字符串也可能会破坏您希望保持原样的其他字符。

于 2013-03-15T02:40:37.423 回答
1

好的,玩弄我发现我可以将“①”转换为它的数值("1")的东西Char.GetNumericValue(),这很有趣,因为IsNumeric("①")出现了False

这似乎也适用于“ⅰ”和“Ⅰ”(不是字母,而是“1”的日语数字格式)

我希望我能更多地了解文化变化......

于 2013-03-15T02:37:00.857 回答