使用Perl 5.14,我创建了两个索引文件供C#Windows Phone 7.5应用程序使用。 “英语”索引中的键主要是ASCII,但偶尔包含Unicode(UTF-8)字符。 “中文”索引中的键都是UTF-8(简体中文)。我正在排序索引的键,以便我可以在Windows Phone应用程序中进行快速查找(二进制搜索)。
我的出发点是使用Perl的内置sort()函数和C#的默认String.Compare。在大多数情况下,这是Just Works™。使用中文字符时,我遇到了一些麻烦,C#System.Threading.Thread.CurrentThread.CurrentCulture可能会因用户指定的区域设置而异(例如,在为中国用户设置的“zh-CN”设备上),但是我在搜索期间通过将CurrentCulture锁定到“en-GB”(与我的构建机器相同)来解决这个问题。
有一段时间,似乎Perl的sort()和C#的String.Compare()可以很好地协同工作。
但是,最近我的数据源已更新,所以我重建了索引。现在在某些情况下,对英语索引的查找失败(中文仍然有效)。我调试了它,我可以看到,当二进制搜索落在包含高值Unicode字符的键上时,它有时(并非总是)以错误的方向走,并且找不到匹配。
我想这里有更多微妙的Unicode校对变量,所以在我走得更远之前,是否有人有魔术公式如何从Perl中可靠地对Unicode数据进行排序以便在C#中使用?< / p>