如何“展平”.NET 中包含宏和变音符号的文本? [重复]

问题描述 投票:0回答:2

可能重复:
如何将 Unicode 字符转换为其等效的 ASCII 字符
如何从 .NET 中的字符串中删除变音符号(重音符号)?

我需要使搜索表单对包含宏、元音变音等的文本不敏感。

例如,“ŌōṒṓṐṑşş”应被视为等于“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”等其他字符,但我希望已经有一种内置方法可以做到这一点。

.net text unicode diacritics
2个回答
2
投票

String 类有一组重载的 Normalize() 方法。


1
投票

你不需要做标准化,这很耗时,而且有更好的东西。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.