2011-03-11 61 views
1

閱讀文件,我試着寫一個控制檯程序,從文件中讀取字符。 我希望它能夠從Unicode文件以及ANSI文件中讀取。使用Windows API

我應該如何解決這個問題?我是否需要編程地區分文件類型並按照順序讀取?或者我可以以某種方式使用像TCHAR之類的Windows API數據類型。

從文件中讀取之間的唯一differnce是,以Unicode我不得不讀取一個字符,在其ASNSI 1個字節2個字節?

IM有點與此Windows API丟失。 將appretiate任何幫助 謝謝

+0

ASCII =每個字符1個字節。 Unicode = 4或每個字符的可變字節數,具體取決於編碼,可能存在字節順序問題。 http://www.joelonsoftware.com/articles/Unicode.html – 2011-03-11 16:05:18

回答

0

我不知道如果Windows API有一些實用方法的各種文本文件。

一般來說,您需要閱讀文件的BOM(http://en.wikipedia.org/wiki/Byte_Order_Mark),它會告訴您在成功讀取字符時實際使用的Unicode編碼正確。

0

您從文件中讀取字節,然後按預期的格式指示解析這些字節。

通常,通過讀取最初的BOM來檢查文件是否包含UTF文本,然後繼續讀取文件字節的其餘部分,按照您認爲編碼的方式解析這些文件。

Unicode文本通常被編碼爲UTF-8(每字符1-4個字節),UTF-16(2個或每字符4個字節),或UTF-16(每個字符4個字節)

0

別擔心讀取ANSI和UNICODE文件沒有區別。差異僅在處理過程中發生

1

您可以嘗試在緩衝區中以二進制模式讀取文件的第一個塊(1 KB應該足夠了),並使用IsTextUnicode函數確定它是否可能是某種變體統一;注意到這個函數除非發現它是Unicode文本(例如BOM)的一些「強有力的」證據,從根本上對緩衝區進行統計分析以確定「看起來像什麼」,所以它可能會給出錯誤的結果;此功能失敗的情況是(着名的)「Bush hid the facts」錯誤。

不過,你可以設置使用其標誌是多少猜測來完成。

請注意,如果您的應用程序並沒有真正操作/顯示你甚至可能不會需要確定它是否是ANSI或Unicode文本,就讓它來編碼無​​關。