区分日语数字格式

时间:2013-03-15 02:11:18

标签: .net string string-comparison

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

在日语中,数字字符串可以用不同的方式编写,例如,对于"1",半宽度为"1""ⅰ""Ⅰ""①"字符。

我需要比较"MyString1""MyString①"之类的字符串,并且由于显而易见的原因,它们并不相同。 我想知道是否有办法自动将"①"类型字符自动更改为"1"

修改

我知道明显的答案是列出所有可能的“①”类型字符(其数量有限)并在目标字符串中替换它们。但是,在我看来,这不是一个非常“好”的方式来解决这个问题,也不是非常强大......所以如果有一种通用的方法,我宁愿使用它。

修改

道歉,我之前写道,机器人"①""1"被认为是数字,但事实并非如此。 IsNumeric "①"出现错误。所以我想除了使用直接替换之外,实际上根本没有办法从一个切换到另一个。

2 个答案:

答案 0 :(得分:4)

fileformat.info告诉我circled digits可以分解为常规数字。点击此in ideone表明在.NET中实现的normalization forms是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

尽管如此,有一点需要注意,对字符串进行规范化也可能会破坏您希望保持原样的其他字符。

答案 1 :(得分:1)

好的,玩弄我发现我可以使用"1"将“①”转换为数值(Char.GetNumericValue()),这非常有趣,因为IsNumeric("①")出现为{{ 1}}。

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

我希望我更了解文化的变化......