2013-02-22 1 views
7

Openofficeライターからメモ帳に貼り付ける際に、すべての特殊文字を読み込むサンプルアプリケーションを作成しました。ダブルコードは違うと私はこれを読み込もうとするとき。Issue C#テキストファイルの読み込みで約65533 012

var lines = File.ReadAllLines("..\\ter34.txt"); 

これは65533号の問題を作成するには、来て、テキストファイルには含まれています

これは、シンボルに変更されました:

+2

テキストファイルはどのエンコーディングを使用していますか? ANSI? ASCII? UTF8? UTF16? –

+0

問題はANSI ....にのみ付属しています。正常に動作する残りの部分は - " - –

+1

に変更されます。 '(char)65533'はU + FFFDとも呼ばれ、置換文字です。これは、変換されるデータが壊れている場合、または変換先のエンコーディングが正しい文字を表すことができない場合によく発生します。 [Wikipedia](http://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character)を参照してください。 –

答えて

20

U+FFFDは、 "Unicodeの置換文字" でありますこれは、バイナリデータをテキストに変換するために使用されているエンコーディングに対して、読み取ろうとするデータが無効である場合に使用されます。その後、例えば

、あなたはISO-8859-1を使用してファイルを書き出す場合は、しかししようが、UTF-8を使用してにそれを読んで、あなたは簡単に、単純に有効なUTFないいくつかのバイト列で終わる可能性-8。それぞれの無効なバイトは、(デフォルトで)U + FFFDに変換されます。

基本的には、2番目の引数としてFile.ReadAllLinesに適切なエンコーディングを指定する必要があります。つまり、最初にファイルのエンコーディングを知る必要があります。

+0

奇妙なことに、私はいつもこれがカスタム機能データストリーミング/トランスコーディングライブラリだと思っていました。そして、それはよく定義されたUnicodeトランスコードの動作ですか?すばらしいです! – quetzalcoatl

+0

txtファイルをUTF8、Unicodeなどの形式で保存すると正しく動作しますが、ANSIで保存するとそのシンボルが表示されます –

+0

Unicodeファイルでは多くの異なる文字が表示され、ANSIでは選択されたCodePageに依存します。通常ははるかに少ない。いくつかの '拡張'文字をANSIファイルに保存しようとすると、選択した(またはデフォルトになっている)ANSI CodePageにこの文字を単純に変換できない可能性があります。そのような場合には、例外がスローされ、すべてのものがクラッシュして問題が発生することがあります。そうでない場合は、それらの文字が静かにスキップされます(eeviill)。または、代わりの文字がファイルに書き込まれます。 – quetzalcoatl

関連する問題