2016-11-24 38 views
-1

我想爲遺留系統創建一個平面文件,並且他們強制要在TextEncoding的MS DOS .txt文件中呈現數據(文本文檔 - MS-DOS格式CP_OEM)。我在使用C#(.net4.0框架)中的UTF8Encoding類生成的文件之間有點混亂,我認爲它在默認的txt文件(編碼:CP_ACP)中生成了一個文件。什麼編碼用於使用C#創建MS-DOS txt文件(UTF8Encoding與編碼)

我認爲編碼名稱CP_ACP,Winodows和ANSI指的是相同的東西,Windows默認是ANSI,它會省略任何Unicode字符信息。

如果我在C#庫中使用UTF8Encoding類來創建一個文本文件(如下所示),它會在MS DOS txt文件格式?

byte[] title = new UTF8Encoding(true).GetBytes("New Text File"); 

按照答案提供顯而易見的是,UTF8是不是等同於MSDOS的TXT格式,應該使用Encoding.GetEncoding(850)方法得到的編碼庫。

我閱讀以下帖子來檢查我的信息,但沒有結論。 https://blogs.msdn.microsoft.com/oldnewthing/20120220-00?p=8273

https://blog.mh-nexus.de/2015/01/character-encoding-confusion

https://blogs.msdn.microsoft.com/oldnewthing/20090115-00?p=19483

最後得出結論爲創建一個字節數組時要轉換回實際的文件(注意到Encoding.GetEncoding(850)去:我使用的字節數組因爲我可以利用現有的中間產品)。

+0

是的,它是有用的知道AUS的代碼頁,只是另一個快速的一個微不相關的,Tab Tab是分隔符用於這些平面文件類型(通常我的意思是允許遺留系統處理)? – Lin

+0

爲什麼會有這樣的反對票? – Lin

回答

1

您可以使用File.ReadXY(String, Encoding)File.WriteXY(String, String[], Encoding)方法,其中XYstring[],分別IEnumerable<string>string工作要麼AllLinesLinesAllText

MS-DOS使用不同的代碼頁。可能代碼頁850「西歐/拉丁-1」或代碼頁437「OEM-US/OEM/PC-8/DOS拉丁美洲」(如@HansPassant建議)將會沒問題。如果您不確定,需要創建哪個代碼頁,請創建包含ä,ö,ü,é,ê,ç,à或希臘字母等字母的示例文件,並查看它們是否有效。如果您不使用這些字母或其他特殊字符,那麼代碼頁不是非常重要。

File.WriteAllText(path, "Hello World", Encoding.GetEncoding(850)); 

對於ANSI和UTF-8,所有MS-DOS代碼頁的字符代碼從0到127(7位)是相同的。有時會使用BOM(字節順序標記)引入UTF文件。

MS-DOS只知道8位字符。對於不同的國家代碼頁,代碼128到255不同。

參見:File Class,Encoding ClassWikipedia: Code Page

+0

所以你建議UTF8Encoding類不會生成MS DOS文本文件? – Lin

+0

UTF-8對於前256個字符可以使用ANSI,但可以包含更多字符,包括中文,泰文,埃及象形文字等等。 MS-DOS編碼明顯不同。它們通常包含框圖繪製字符。 –

+0

新的Encoding(850)在.net 4中不起作用。0框架作爲編碼類是抽象類 – Lin