2011-07-07 77 views
6

我有一個VB6應用程序,它執行文件夾的目錄列表並選取文件名。其中一些是重音符號,例如「Guimarães.txt」(帶有波浪號的小A)。 VB Dir函數和FileSystemObject函數都無法識別重音字符,而是將文件名返回爲「Guimar?es.pdf」,因此我無法打開文件。我可以在Windows資源管理器中正確地看到該文件在VB6中讀取重音文件名

這隻發生在運行Windows Server 2003 R2的一個活動環境中。在我們的測試系統中,我們可以正確地讀取文件,但這些文件主要是Windows 2008和Windows 7.我最初認爲這取決於FSO的版本,但由於「Dir」給出了相同的結果,我不再這麼認爲。另外,當我將文件的名稱寫入日誌文件時,它也是不正確的。所以我認爲在很早的階段就無法處理這個角色,並用一個問號來代替它。

我需要確定的是問題的原因:它是由Windows的版本還是由於我的區域設置(我無法查看,因爲我的帳戶被鎖定),以及我能做什麼解決問題。目前,我已經要求用戶不要使用這些字符,但這不是一個長期的解決方案。

謝謝。

+2

我會懷疑這個問題與VB6有關,並且缺乏對Unicode的支持。 –

+4

嘗試在「區域設置」中將「非Unicode程序的語言」設置爲葡萄牙語,然後查看是否解決了該問題。我相信它應該。不幸的是,我懷疑舊的MS VB運行時支持Unicode,就像科迪說的那樣。 –

+0

基本原因確實是VB6試圖只使用一個字節來編碼100.000個不同的字符。有些字母會丟失。改變語言只會改變哪些字母會丟失。但是?那就是U + 00E3,即ISO-8859-1/CP1252,這是迄今最常見的。 – MSalters

回答

2

好的,從磁盤讀取的文件名使用unicode。 當您嘗試並顯示此字體時,使用的字體不支持該字形,因此它顯示「?」,但將其寫入磁盤會寫入正確的表示形式。 然後當它傳遞給文件函數時,它被「轉換」爲MBCS或其他字符集,然後breask。

您可以更改您的代碼以使用本地寬的Win32 API調用,或者更改「unicode程序的語言」以匹配文件名中使用的語言。

+0

謝謝。如上所述,我相信這是由於中國人是違約的。但是,「非Unicode程序的語言」確實適用於VB6嗎?我問,它的unicode功能有些模糊。 – olippold

+1

VB6本身就是unicode,但令人遺憾的是,它與外界的大多數交互都是通過接口轉換爲/從unicode轉換爲多字節字符(這就是「非unicode應用程序」的作用) – Deanna