Windows不变的文化之谜

我有一个关于窗口不变文化的问题。

简单地说,我的问题是:

是否存在任何一对字符c1和c2,使得:

下(c1,不变)= 拉丁一般下(c2,不变)

下(c1,invaraint)!= 不变下(c2,不变)

背景:

我需要在SQL Server Compact内部存储不变的小写string(表示文件名),该string不支持窗口不变整理。

理想情况下,我想这样做,而不必将所有的比较逻辑从数据库中提取出来并放到我的应用程序中。

我想解决这个问题的想法是存储所有文件名的两个版本:一个用于向客户显示数据,另一个用于执行比较。 在将数据存储到数据库中之前,使用Windows不变语言环境将比较列转换为小写字母。

然而,我并不清楚不变文化是做什么样的映射,除了它用来比较文件名的事实。

我想知道是否有可能由于这个计划而得到误报(或者是否定的否定)。

也就是说,我可以使用拉丁语-1不区分大小写的SQL服务器sorting规则来产生比较相等的字符(以前使用不变文化sorting),但在不变文化下不会相互比较吗?

如果这可能发生,那么我的应用程序可能会认为Windows认为是相同的2个文件。 这最终可能会导致数据丢失。

注意:

我知道在Windows上可能有区分大小写的文件。 但是,我不需要支持这些情况。

通过查看这个问题的答案:

Win32的文件名,对比

我问了一会儿。

我发现了一个间接链接的下一页:

http://msdn.microsoft.com/en-us/library/ms973919.aspx

它建议在不变的大写之后使用序数比较作为模仿文件系统的最佳方式。

所以我认为,如果我在数据库中使用“区分大小写,区分重音”的排序规则,并在存储文件之前使用不变的本地做“上”,我应该可以。

有谁知道是否有任何问题?

你为什么不把文件名转换为ASCII? 在你的情况下,文件名可能包含非ASCII字符?

为什么不使用URL编码文件名的utf8字节表示来获得一个ascii版本,它可以很容易地转换回unicode而不会有任何损失?

“但是,我不知道不变文化是怎样映射的,除了它用来比较文件名的事实之外。”

比较文件名时,我不认为Windows使用了不变的文化。 例如,如果我的文化是英语,那么我可以命名土耳其语和土耳其语两个单独的文件,但如果某人的文化是土耳其语,那么我希望Windows不会让他们这样做。