2

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

简而言之,我的问题是:

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

较低(c1,不变)=拉丁通用 较低(c2,不变)

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

背景:

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

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

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

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

我想知道是否有可能因为这个方案而得到误报(或误报)。

也就是说,我是否可以使用 latin-general-1 不区分大小写的 SQL 服务器排序规则生成彼此比较相等的字符(以前使用不变区域性小写),但在不变区域性下不比较彼此相等?

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

笔记:

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

4

4 回答 4

3

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

win32 文件名比较

我不久前问过的。,

我在以下页面找到了一个间接链接:

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

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

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

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

于 2009-06-30T01:51:14.480 回答
0

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

于 2009-06-30T00:34:28.600 回答
0

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

于 2009-06-30T00:51:19.547 回答
0

“但是,我真的不知道不变文化做了什么样的映射,除了 Windows 使用它来比较文件名这一事实。”

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

于 2009-06-30T01:14:02.857 回答