针对Umlaute的文化感知字符串比较

6

我需要比较两个德语字符串,以检查它们是否相等,仅在使用umlaut时有所不同。例如,“Jörg”应该与“Joerg”相同。

因此,我尝试了以下代码:

var ci = new CultureInfo("de-DE");
int compareResult = ci.CompareInfo.Compare("jörg", "joerg", CompareOptions.IgnoreNonSpace);

以及

int compareResult = String.Compare("jörg", "joerg", true, ci);

(或者这两者无论如何都是相等的吗?)
然而,这种方法行不通,会返回1。所有包含ü、ö和ä的字符串也是如此。如果我以同样的方式比较strassestraße,这种方法可以运行并返回0!感谢任何想法!这篇帖子建议我的方法应该可行。

为何不直接替换它们呢("Jörg".Replace("ö","oe"))? - Random Dev
有很多变通方法,当然,但我不明白为什么直接的方式不起作用。 - silent
Coinkindez?请看这里的讨论!TLTR?它不起作用是因为它不应该!Poet != Pöt等。 - TaW
不确定您想告诉我们什么。您知道,您链接的讨论是从这里的问题衍生出来的吗?!;-) - silent
2个回答

4

我曾经遇到过同样的问题,发现没有其他解决方案,只能通过安装扩展程序来替换它们。据我所知,目前没有“直接”的解决方案。

public static string ReplaceUmlaute(this string s) 
{
    return s.Replace("ä", "ae").Replace("ö", "oe").Replace("ü", "ue").Replace("Ä", "AE").Replace("Ö", "OE").Replace("Ü", "UE");
}

结果:

int compareResult = String.Compare("jörg".ReplaceUmlaute(), "joerg", true, ci); // 0

有什么想法吗?这是框架中的错误还是设计问题?如果 ß 能够正常工作,那么肯定也应该能够使用 umlaute ! - silent
1
@TimSchmelter ß和ss在大小写上完全相同 - 这是可以的。那么为什么ö和oe不能相同呢? - silent
@silent:有道理,说实话,我不知道为什么在德国文化或其他任何文化中(甚至是CultureInfo.InvariantCulture),ßss被视为相同的。我猜这可能与这里的评论有关(https://msdn.microsoft.com/en-us/library/vstudio/cc165449.aspx):“从语言学上讲(在Windows中),“ss”等于德语essetz:在en-US和de-DE文化中都是字符'ß'。” - Tim Schmelter
@fubo 感谢提供链接。虽然还没有完全说服我,但这并不是你的错,而是微软的错...在德语中,我认为 ö 和 oe 一样,ß 和 ss 也是相等的。 - silent
@silent 我和你一样,但是微软没有实现那个功能。不要杀死带来坏消息的人 :-) - fubo
显示剩余6条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接