我的程序寫在德爾福7,我想避免俄羅斯或中國人, 韓國人嘗試使用我的軟,因爲文件路徑包含Unicode字符,我的程序無法處理它們(只要我沒有在支持UNICODE的新Delphi版本上移植我的程序)。德爾福7中的用戶語言支持
如何在Delphi 7中編寫檢測「Unicode語言」的函數?
我的程序寫在德爾福7,我想避免俄羅斯或中國人, 韓國人嘗試使用我的軟,因爲文件路徑包含Unicode字符,我的程序無法處理它們(只要我沒有在支持UNICODE的新Delphi版本上移植我的程序)。德爾福7中的用戶語言支持
如何在Delphi 7中編寫檢測「Unicode語言」的函數?
德爾福7程序(在其VCL部分)可以處理俄語,中文或韓語字符沒有任何問題。
如果Windows系統語言設置正確,charset將匹配相應的編碼,並且文件名將能夠具有此charset中可用的Unicode字符。實際上,當VCL調用Windows API(所有....A()
調用將執行轉換,然後調用....W()
版本)時,默認string=AnsiString
將轉換爲Unicode。
可以強制default code page(一個將選擇要使用的字符集),通過調用代碼like this:
if GetThreadLocale<>LCID then // force locale settings if different
if SetThreadLocale(LCID) then
GetFormatSettings; // resets all locale-specific variables
在這種情況下,在目前的系統字符集的TFileName
(= AnsiString
)將是由Windows轉換爲相應的Unicode字符,並且可以在Delphi 7應用程序中使用它。
什麼你不能用標準的VCL AnsiString類型做用它來直接混合字符集字符,因爲你可以從德爾福2009年,由於新string = UnicodeString
默認模式。
PS:
由於字符集只涉及#128 ..#255個字符(即所有位7集),如果你只使用#0 ..#127個字符,您的字符串將是一致的不管當前的字符集/代碼頁設置是什麼。如果您只使用英文字符和數字,例如,無論字符集/代碼頁是什麼,您的路徑將始終有效。但是,如果您使用非英文字符,則只有正確設置字符集/代碼頁時,路徑纔會起作用,最終用戶使用的路徑就是這種情況(例如在運行時使用TOpenDialog
)。
我可以在unicode路徑上使用fileexists嗎? – user382591
用戶,我不認爲你已經意識到一個簡單的事實,即unicode路徑無處不在,即使在美國。您可以在任何地方將其分成完全相同的數量,也可以向上移植到Unicode delphi版本。 –
@ user382591 FileExists()將在Delphi 7中使用TFileName = AnsiString參數,在搜索文件時,它將被Windows(使用當前代碼頁/字符集)轉換爲Unicode文件名。因此,FileExists()總是使用unicode路徑,具體取決於當前的字符集。 –
你需要詳細說明你的意思。目前尚不清楚。 –
我想檢測用戶使用的是哪種語言,如果它是韓文,中文,俄文,...我想告訴他他不能使用mysoft – user382591
「用戶使用的語言」是什麼意思?這可能是很多事情。準確。無論如何,你爲什麼要用你的sw來阻止它們。它可能工作。如果它不起作用,那麼它們將不會使用它! –