Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows不变文化之谜_C#_Sql Server_Windows_Filesystems_Culture - Fatal编程技术网

C# Windows不变文化之谜

C# Windows不变文化之谜,c#,sql-server,windows,filesystems,culture,C#,Sql Server,Windows,Filesystems,Culture,我有一个关于windows不变文化的问题 简而言之,我的问题是: 是否存在任何一对字符c1和c2,以便: lower(c1,不变量)=拉丁语一般lower(c2,不变量) 但是 下(c1,不变)=不变下限(c2,不变) 背景: 我需要在SQL Server Compact中存储一个不变的小写字符串(表示文件名),它不支持windows不变排序规则 理想情况下,我希望这样做,而不必将我所有的比较逻辑从数据库中拉到我的应用程序中 我解决这个问题的想法是存储所有文件名的两个版本:一个用于向客户显示数据

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

简而言之,我的问题是:

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

lower(c1,不变量)=拉丁语一般lower(c2,不变量)

但是

下(c1,不变)=不变下限(c2,不变)

背景:

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

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

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


然而,除了windows用来比较文件名的事实之外,我真的不知道不变区域性会做什么样的映射

我想知道这个方案是否可能导致误报(或漏报)

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

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

注意:


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

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

为什么不对文件名的utf8字节表示进行URL编码,以获得ascii版本,该版本可以轻松地转换回unicode而不会丢失?

“但是,除了windows用来比较文件名之外,我真的不知道不变区域性是做什么样的映射的。”


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

通过查看此问题的答案:

这是我不久前问的

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

它建议在不变的大写字母之后使用顺序比较,这是模仿文件系统的最佳方式

因此,我认为如果我在数据库中使用“区分大小写,区分重音”的排序规则,并在存储文件之前使用不变的局部进行“上”排序,我应该可以


有人知道这是否有问题吗?

有。例如,国际用户在命名文件时可能使用非ascii字符。您是否可以通过将国际用户限制为ascii来消除问题?根据他存储的内容,确定他可以通过限制国际用户来消除问题(也限制埃及用户)但他说他在存储文件名,很多文件名不是阿拉伯语。问题不在于编码数据。我可以在数据库中存储unicode数据。问题是我需要使用windows用于比较文件名的相同规则来比较数据库中的文件名。我想知道是否有我的方案将破坏的字符。然后我假设您需要保留顺序——如果您只对相等感兴趣,url编码将很好。我需要的是SQL server以与Win32相同的方式比较文件名。url编码对此没有帮助。因为文件名比较在内核中,我打赌它将允许您在Turkish环境。内核还使用系统默认区域性^H^H^H^H^H^H^H^H代码页在Unicode和ANSI/OEM之间进行转换。Turkish有自己的代码页。我更关心Win32做什么,然后是内核做什么。NTFS允许比Win32更多的东西,因为它支持posix之类的东西。Win32是(通常)不区分大小写。