从VB.NET编写文本文件(编码)

时间:2009-08-21 17:55:54

标签: .net vb.net encoding text-files

我正在编写一个必须生成具有固定大小列的纯文本文件的应用程序。

我目前的代码是:

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()

我的问题是我有一些特殊字符,如:“ñ”,“à”等,我找不到正确的编码。

  • 如果我使用默认值,则替换它 “ñ”有两个字符。
  • 如果我使用ASCII则所有特殊 字符最终为:“?”
  • 如果我使用UTF-8,那么所有文字都可以, 但它在第一个字节中添加了“ÿ” 文件。

我需要在文本文件中写入特殊字符,就像它们在datareader中一样。而且我不能添加额外的字符,因为列具有固定的长度......

我该怎么办?

3 个答案:

答案 0 :(得分:2)

您如何检查您是否获得了正确的编码?

如果您只是在Notepad中打开文件,则Windows-1252可能是您想要的编码。

Encoding.GetEncoding("Windows-1252")

会给你那个。

请注意,我注意到您说某些列是固定长度的。您是否正在将数据写入文件以供其他工具导入?如果是这样,那么你应该检查一下其他工具需要什么样的编码,而不是在你用它来查看文件的其他任何工具(如记事本)中看起来漂亮的工具。

答案 1 :(得分:0)

等等,你说列必须是“固定长度”。这表明您正试图让另一个应用程序读取此文件 - 您是否确定第二个应用程序可以读取“特殊”(Unicode)个字符?

你确定其他应用程序不仅仅期望ASCII,并且只是有一个特定的code page,它使用完全不同的数字来处理这些特殊字符中的一些(用某种本地语言解释高位ASCII字符)?

答案 2 :(得分:0)

问题不在于您无法找到正确的编码,问题是您不知道您的SOURCE编码是什么。纯ASCII只有256个字符,如果您的源包含不在ASCII调色板中的重音字符,您将无法以ASCII编码编写它们。故事结束。

您需要做的是重新检查两个系统之间的通信。如果您需要具有unicode字符,那么源和目标都需要接受unicode,无论是在平面文件中还是在某些XML文档中。

您不能将方形钉(unicode重音字符)放入圆孔(ASCII文件)。