2009-08-21 16 views
0

固定サイズの列を持つプレーンテキストファイルを生成する必要があるアプリケーションを作成しています。VB.NET(エンコード)からテキストファイルを書く

私の現在のコードは次のとおりです、「N」「A」、など、と私は右のエンコーディングを見つけることができません。

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

私の問題は、私のようないくつかの特殊文字を持っているということです。

  • デフォルトを使用すると、 "ñ"が2文字に置き換えられます。
  • ASCIIを使用すると、すべての特殊文字 は "?"
  • UTF-8を使用すると、すべてのテキストはOKですが、 ですが、 の最初のバイトに "ÿ"が追加されます。

データレディーヤーのように特殊文字をテキストファイルに書き込む必要があります。列が固定長であるため余分な文字を追加することはできません。

私は何ができますか?

+3

は[Byte-Order Mark] [1]です...あなたは何のファイルを開いていますか? [1]:http://en.wikipedia.org/wiki/Byte-order_mark – Breakthrough

答えて

2

正しいエンコーディングが得られたことをどのように確認していますか?

Notepadにファイルを開くだけであれば、おそらくWindows-1252が必要なエンコードです。

Encoding.GetEncoding("Windows-1252") 

となります。

一部の列は固定長であると言います。別のツールでインポートするためにデータをファイルに書き込んでいますか?そうであれば、他のツールが必要とするエンコーディングを確認してください。メモ帳などのファイルを見るために使用するツールがあれば、どのツールがきれいに見えるかは確認してください。

+0

Worked Perfect! – Burnsys

+0

ファイルは、アクセス権のない第三者のアプリケーションによって読み取られます。 私はV.exe(HEX Viewer)を使ってファイルを見ていますが、これはhttp://www.asciitable.com/と互換性があります。これは、 "Ñ"がDec:164またはHEX:F1 – Burnsys

+0

に等しいことを意味します。 "メモ帳でファイルを開くだけの場合は、おそらくWindows-1252が必要なエンコーディングです。"あなたがアメリカや西ヨーロッパにいる場合は真ですが、他の世界では必ずしも真実ではありません。もちろん、それらの人々はエンコーディングについてもっと知識がある傾向があるので、それは分かりやすいアドバイスです。 – MarkJ

0

待って、列が "固定長"でなければならないと言います。これは、このファイルを別のアプリケーションで読み取ろうとしていることを示唆しています。この2番目のアプリケーションが「特殊」(Unicode)文字を読み取ることさえ可能ですか?

他のアプリケーションがASCIIのみを想定しておらず、完全に異なる数字(一部のローカル言語で上位ビットのASCII文字を解釈する)を使用して特殊文字の一部を処理する具体的なcode pageがありますか?

+0

私はHEXビューアーでファイルを読んでいます。 – Burnsys

0

問題は適切なエンコーディングが見つからないということではなく、問題はあなたのSOURCEエンコーディングがわからないということです。プレーンASCIIは実際に256文字しか持っていません。ソースにASCIIパレットにないアクセント付き文字が含まれていると、ASCIIエンコーディングで書き込むことができなくなります。物語の終わり。

あなたがしなければならないことは、2つのシステム間の通信を再検討することです。ユニコード文字を使用する必要がある場合は、ソースと宛先の両方をフラットファイルまたは一部のXMLドキュメントでUnicodeを受け入れる必要があります。

丸穴(ASCIIファイル)に四角いペグ(ユニコードアクセント文字)を配置することはできません。

+1

正方形の面積が円の面積に2/piを掛けたものに等しい限り、これを行うことができます。 ;) –

関連する問題