首页 文章

Windows不变文化拼图

提问于
浏览
2

我有一个关于windows不变文化的问题 .

Succinctly, my question is:

是否存在任何一对字符c1和c2,以便:

lower(c1,invariant)= latin-general lower(c2,Invariant)

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

Background:

我需要在SQL Server Compact内部存储一个不变的小写字符串(表示文件名),它不支持Windows不变的排序规则 .

理想情况下,我想这样做,而不必将我的所有比较逻辑从数据库中拉出来并进入我的应用程序 .

我解决这个问题的想法是存储所有文件名的2个版本:一个用于向客户显示数据,另一个用于执行比较 . 在将比较列存储在数据库中之前,将使用Windows不变区域设置将比较列转换为小写 .

但是,我真的不知道不变文化做了什么样的映射,除了它用于比较文件名的事实 .

我想知道这个方案是否有可能得到误报(或假阴性) .

也就是说,我可以使用latin-general-1不区分大小写的SQL服务器排序规则来生成相互比较相等的字符(以前使用不变文化来设置较低的字符),但是在不变文化下不能相互比较吗?

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

NOTE:

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

4 回答

  • 3

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

  • 0

    “但是,我真的不知道不变文化会做什么样的映射,除了它用于比较文件名的事实 . ”

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

  • 0

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

    win32-file-name-comparison

    我问了一会儿 . ,

    我发现了以下页面的间接链接:

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

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

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

    有谁知道这有什么问题吗?

  • 0

    为什么不将文件名转换为ASCII?在您的情况下,文件名可以包含非ascii字符吗?

相关问题