如何在.NET中“展平”包含macrons和umlauts的文本?

时间:2011-10-06 23:27:15

标签: .net text unicode diacritics

  

可能重复:
  How to convert a Unicode character to its ASCII equivalent
  How do I remove diacritics (accents) from a string in .NET?

我需要使搜索表单对包含macrons,umlauts等的文本不敏感。

例如,“ŌōṒṓṐṑȪȫ”应被视为等于“oooooooo”。

在TSQL中,我能够部分使用它:

select Cast('ŌōṒṓṐṑȪȫ' as varchar)

返回Oo??????。将前两个字符翻译为“O”和“o”是足够聪明的。

我试图使用这个C#代码来“压扁”文本,但它根本不起作用。结果是“????????”。

var text = "ŌōṒṓṐṑȪȫ";
var buffer = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, Encoding.Unicode.GetBytes(text));

var result = Encoding.ASCII.GetString(buffer);

有没有办法在.NET中执行此操作?我知道我可以创建一个地图,将“ŌōṒṓṐṑȪȫ”等字符链接到“o”等等其他字符,但我希望已经有一种内置方法可以做到这一点。

2 个答案:

答案 0 :(得分:2)

编辑:
忽略原文。 String类有一组重载的Normalize()方法。

ORIGINAL:

我不知道.NET内置的任何方法,但是这两篇文章和一些Win32 pinvoke你应该设置:

See section 4.3: Normalization

Win32 Unicode overview

答案 1 :(得分:1)

您不需要进行规范化,这非常耗时,而且还有更好的选择。

大多数字符串比较操作都有一个带有CompareOptions的风格。 您可以将其用于CompareOptions:

static_cast<CompareOptions>(CompareOptions::IgnoreCase | CompareOptions::IgnoreNonSpace)

请参阅CompareInfo类http://msdn.microsoft.com/en-us/library/2z428sw8.aspx