2009-08-21 137 views
0

我正在編寫一個應用程序,它必須生成具有固定大小列的純文本文件。從VB.NET寫入文本文件(編碼)

我當前的代碼是:

Dim MyFilePath As String = Path & FILE_PREFIX & FileNr & ".TXT" 

IO.File.Delete(MyFilePath) 

Dim FileStr As New IO.StreamWriter(MyFilePath, False, <ENCODER HERE>) 
Do While r.Read 
    FileStr.WriteLine(r("TXTLine")) 
Loop 
FileStr.Close() 
r.Close() 

我的問題是,我有一些特殊的字符,如:「N」,「A」,等等,我無法找到正確的編碼。

  • 如果我使用默認值,那麼它會用兩個字符替換 「ñ」。
  • 如果我使用ASCII,那麼所有特殊的 字符最終爲:「?」
  • 如果我使用UTF-8那麼所有的文本都是OK, 但它在文件的第一個字節 中增加了一個「ÿ」。

我需要將特殊字符寫入文本文件,就像它們進入數據記錄器一樣。而且我不能添加額外的字符,因爲列是固定長度的...

我該怎麼辦?

+3

ÿ是[字節順序標記] [1] ...你在打開什麼文件? [1]:http://en.wikipedia.org/wiki/Byte-order_mark – Breakthrough 2009-08-21 17:59:00

回答

2

你是如何檢查你是否有正確的編碼?

如果您只是打開文件NotepadWindows-1252可能是您想要的編碼。

Encoding.GetEncoding("Windows-1252") 

會給你那個。

請注意,我注意到你說有些列是固定長度的。你是否將數據寫入文件以供其他工具導入?如果是這樣,那麼你應該檢查一下其他工具需要的編碼,而不是在你用來查看文件的其他工具(如記事本)中看起來漂亮的工具。

+0

工作完美! – Burnsys 2009-08-21 18:06:55

+0

該文件將被第三方應用程序讀取,我無法訪問該應用程序。 我正在用V.exe(HEX Viewer)查看文件,我只是需要它與此兼容:http://www.asciitable.com/。這意味着「Ñ」等於Dec:164或HEX:F1 – Burnsys 2009-08-21 18:34:20

+0

「如果您只是在記事本中打開文件,則Windows-1252可能是您想要的編碼。如果你在美國或西歐,這是真的,在世界其他地方不一定是這樣。當然這些人往往對編碼有更多的瞭解,所以這是明智的建議。 – MarkJ 2009-08-22 20:32:00

0

等一下,你說列必須是「固定長度」。這表明你正試圖讓這個文件被另一個應用程序讀取 - 你甚至確定這個第二個應用程序可以讀取「special」(Unicode)個字符嗎?

您確定其他應用程序不僅僅只需要ASCII碼,而只是具有特定的code page,它可以使用完全不同的數字處理少數這些特殊字符(解釋某些本地語言中的高位ASCII字符)?

+0

我正在用HEX查看器讀取文件。 – Burnsys 2009-08-21 18:07:27

0

問題不是你找不到合適的編碼,問題是你不知道你的SOURCE編碼是什麼。純ASCII只有真正的256個字符,並且如果您的源代碼包含不在ASCII調色板中的重音字符,則無法使用ASCII編碼寫入它們。故事結局。

您需要做的是重新檢查兩個系統之間的通信。如果您需要使用Unicode字符,則源代碼和目標都需要接受unicode,無論是在平面文件還是在某個XML文檔中。

您不能將方形掛鉤(unicode重音字符)放入圓孔(ASCII文件)中。

+1

只要平方的面積等於圓的面積乘以2/pi,就可以。 ;) – 2009-08-21 18:42:33