我怎样才能“压平” .NET 中包含宏和变音符号的文本?

发布于 2024-12-08 17:33:49 字数 911 浏览 2 评论 0原文

可能的重复:
如何将 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”等其他字符,但我希望已经有一种内置方法可以做到这一点。

Possible Duplicate:
How to convert a Unicode character to its ASCII equivalent
How do I remove diacritics (accents) from a string in .NET?

I need to make a search form insensitive to text that contains macrons, umlauts, etc.

For example, "ŌōṒṓṐṑȪȫ" should be considered equal to "oooooooo".

In TSQL I'm able to get it partially working with:

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

which returns Oo??????. It is smart enough to translate the first two characters to "O" and "o".

I was trying to use this C# code to "flatten" the text but it doesn't work at all. The result is "????????".

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

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

Is there a way do this in .NET? I know I could create a map that links characters such as "ŌōṒṓṐṑȪȫ" to "o" and so on for other characters, but I'm hoping there is already a built-in way to do this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪花飘飘的天空 2024-12-15 17:33:49

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

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

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

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

You don't need to do normalization, it is time consuming, and there is something better.

Most string comparison operations have a flavor that takes a CompareOptions.
You can use this for CompareOptions:

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

See the CompareInfo class http://msdn.microsoft.com/en-us/library/2z428sw8.aspx

请止步禁区 2024-12-15 17:33:49

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

The String class has a set of overloaded Normalize() methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文