在.NET中,我需要(如果可能的话)区分不同类型的日语数字字符串。
在日语中,数字字符串可以用不同的方式编写,例如,对于"1"
,半宽度为"1"
,"ⅰ"
,"Ⅰ"
,"①"
字符。
我需要比较"MyString1"
和"MyString①"
之类的字符串,并且由于显而易见的原因,它们并不相同。
我想知道是否有办法自动将"①"
类型字符自动更改为"1"
?
修改
我知道明显的答案是列出所有可能的“①”类型字符(其数量有限)并在目标字符串中替换它们。但是,在我看来,这不是一个非常“好”的方式来解决这个问题,也不是非常强大......所以如果有一种通用的方法,我宁愿使用它。
修改
道歉,我之前写道,机器人"①"
和"1"
被认为是数字,但事实并非如此。 IsNumeric "①"
出现错误。所以我想除了使用直接替换之外,实际上根本没有办法从一个切换到另一个。
答案 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”)
我希望我更了解文化的变化......