2009-06-30 57 views
2

我有一個關於Windows不變文化的問題。Windows不變文化益智

簡潔地說,我的問題是:

不存在任何對字符c1的,和c2使得:

低級(C1,不變)= 拉丁字母一般低級(C2,不變)

較低(C1,invaraint)!= 不變下(C2,不變)

背景:

我需要存儲一個不變的小寫字符串(表示文件名)的SQL Server Compact,它不支持Windows不變的排序規則內。

理想情況下,我想這樣做,而不必將所有比較邏輯從數據庫中拉出並存入我的應用程序。

我解決這個問題的想法是存儲所有文件名的2個版本:一個用於向客戶顯示數據,另一個用於執行比較。在將其存儲在數據庫中之前,使用Windows不變語言環境將比較列轉換爲小寫字母。

但是,我真的不知道不變文化所做的映射是什麼樣的,除了它用來比較文件名的事實。

我想知道是否有可能因此計劃而導致誤報(或漏報)。

也就是說,我可以使用拉丁語-1不區分大小寫的SQL服務器排序規則來比較彼此相等的字符(以前是使用不變文化的下層語言)嗎?但不要在不變量文化?

如果發生這種情況,那麼我的應用程序可能會認爲Windows認爲是相同的2個文件。這最終可能會導致數據丟失。

注:

我知道,有可能在Windows上區分大小寫的文件。但是,我不需要支持這些場景。

回答

3

通過通過回答看這個問題:

win32-file-name-comparison

,我問了一段時間後,

我發現一個間接鏈接以下頁面:

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

它建議使用不變大寫字母后的序數比較作爲mim的最佳方式ic文件系統的功能。

因此,我認爲如果我在數據庫中使用「區分大小寫,區分重音」排序規則,並在存儲文件之前使用不變本地做「上面」,那麼我應該可以。

有誰知道是否有任何問題嗎?

0

爲什麼不將文件名轉換爲ASCII?在你的情況下,文件名可能包含非ascii字符?

+0

是的。例如,國際用戶在命名文件時可能使用非ASCII字符。 – 2009-06-30 00:42:48

+0

您是否可以通過限制國際用戶使用ascii來解決問題? – 2009-06-30 01:20:00

+0

根據他存儲的內容,確定他可以通過限制國際用戶(並限制埃及用戶)以阿拉伯語解決問題。但他說他在存儲文件名,很多文件名不是阿拉伯文。 – 2009-06-30 01:39:17

0

爲什麼不用URL編碼文件名的utf8字節表示來得到一個ascii版本,它可以輕鬆地轉換回unicode而不會有任何可能的損失?

0

「但是,我真的不知道不變文化所做的映射是什麼樣的,除了它用來比較文件名的事實。」

我沒有想到Windows在比較文件名時使用了不變的文化。例如,如果我的文化是英語,那麼我可以命名兩個單獨的文件土耳其語和土耳其語,但如果某人的文化是土耳其語,那麼我希望Windows不會讓他們這樣做。