C#這裏的問題..打開文件對話框的文件名作爲UTF8
我有一個是由非Unicode程序用C++解釋一個UTF8字符串..這是顯示不正確,但據我可以在這個文本告訴,完好無損,然後作爲輸出文件名應用。
無論如何,在一個C#項目中,我試圖用一個System.Windows.Forms.OpenFileDialog對象打開此文件。我從這個對象的.FileNames []得到的文件名是Unicode(UCS-2)。但是,這個字符串被誤解了。例如,如果原始字符串是0xe3 0x81 0x82,FileName [] .ToCharArray()顯示它現在是0x00e3 0x0081 0x201a ....它可能看起來像OpenFileDialog對象只填充它,但它不是..在OpenFileDialog產生的第三個字符,它是不同的,我不知道這個字節發生了什麼..
我的問題是:有沒有將OpenFileDialog框中突出顯示的文件名視爲UTF-8的方法?
我不認爲這是相關的,但如果你需要知道,字符串是日語..
感謝,
克雷布斯
UPDATE
第一所有,感謝所有在這裏提出建議的人,他們非常感謝。
現在,要回答修改C++應用程序以正確處理字符串的建議,似乎並不可行。這不僅僅是一個應用程序正在對字符串進行這樣的操作。實際上,我的公司中有很多這些應用程序需要處理,而且這需要耗費大量的人力和時間,而不是簡單的可用。然而,如果我選擇這條路線,sean e的想法可能是最好的選擇。
@Remy Lebeau:我覺得在腦海中碰到釘子,我會嘗試你提出的解決方案並回報..: )我想你的解決方案的警告是,在C#應用程序環境中,編碼必須與創建該文件的C++應用程序環境相同,這當然是有意義的,因爲它必須使用相同的代碼頁。 。
@Jeff Johnson:我不是將C++應用程序的文件名粘貼到C#應用程序中。我調用OpenFileDialog.ShowDialog()並獲取DialogResult.OK上的OpenFileDialog.FileNames ..我嘗試了使用Encoding.UTF8.GetBytes(),但像雷米Lebeau點泰德出來,它不會工作,因爲原來的UTF8字節丟失..
@everyone其他:謝謝你的想法.. :)
克雷布斯
UPDATE
@雷米Lebeau:你的想法完美的工作!只要C++應用程序的環境與C#應用程序的環境相同(非Unicode程序的相同區域設置),我就可以檢索正確的文本。:)
現在我有更多的問題..哈哈..有沒有什麼辦法來確定一個字符串的編碼?該代碼現在適用於被錯誤解釋爲ANSI字符串的UTF8字符串,但將UCS-2字符串擰緊。我需要能夠確定編碼和相應的處理。 GetEncoding()似乎沒有用.. = /並且StreamReader的CurrentEncoding屬性(始終表示UTF-8)也不是。
P.S.我應該在新帖子中打開這個新問題嗎?
這是行不通的。當對話框填充其FileNames屬性時,原始的UTF-8字節會丟失。由於結果字符串沒有被正確解碼,因此將它們傳遞給UTF8.GetBytes()將不會生成與原始UTF-8文件名相同的字節。 – 2009-06-19 22:00:30
您是否將來自C++應用程序的文件名粘貼到C#應用程序中? – jjxtra 2009-06-19 22:12:16