アラビア語と西洋のテキストが混在するファイルを読む際に問題が発生しています。読み込み中のファイルのBOMを設定する方法
tbx1.Text = File.ReadAllText(fileName.Text, Encoding.UTF8);
をどんなに私は、アラビア語の代わりに表示文字化けを得た「Encoding.UTF8」の代わりにしようとしたどのような値は次のないように私は、テキストボックスにファイルを読み込みます。西洋のテキストはうまく表示されました。
私はそれがテキストボックスが定義された方法に問題があったが、上の私はテキストボックスにいくつかの混合西洋/アラビア語のテキストを書き、これがうまく表示起動しているかもしれないと思った:
tbx1.Text = "Start السلا عليكم" + Environment.NewLine + "Here";
その後、私は開きましたメモ帳を開き、上のテキストをコピーしてから、そのファイルを保存しました。メモ帳の保存ダイアログでは、使用するエンコードを尋ねました。
私はその後、私のコードに保存したファイルを提示し、それが正しく、すべてのコンテンツを表示します。
Iファイルを調べ、始めに3バイナリバイト(メモ帳では見えない)が見つかりました:3バイト
を、Iは、その後の研究により求めBOMを表し、これは、C#を可能"File.ReadAllText(fileName.Text、Encoding.UTF8);"必要に応じてデータを読み取り/表示する。
「Encoding.UTF8」の値を指定することで、この問題を解決する必要があります。
私が考えることができる唯一の方法は、このデータをファイルのコピーに追加し、そのファイルを処理するステップをコーディングすることです。しかし、これはむしろ長らく見えているようです。より良い方法があるのか、なぜEncoding.UTF8が望みの結果をもたらさないのか不思議です。
編集:
まだ運の回答で提案をしようとするにもかかわらず。
次のように私はアラビア語を含むまでのテストデータをカット:
コードを次のように
第二に、「真」と「偽」の両方を試してみましたFileStream fs = new FileStream(fileName.Text, FileMode.Open);
StreamReader sr = new StreamReader(fs, Encoding.UTF8, false);
tbx1.Text = sr.ReadToEnd();
sr.Close();
fs.Close();
を両方とも同じ結果が得られます。
メモ帳++でファイルを開き、アラビア語のISO-8859-6文字セットを指定した場合は、問題なく表示されます。ここで
は++メモ帳でどのように見えるかである(と私は表示するテキストボックスをliekます):
ない問題は、ファイルからの読み込み、またはへの書き込みである場合に確認してくださいテキストボックス。
私は読んだデータ投稿を調べることを試みます。しかし、現時点では私は困惑しています。
http://stackoverflow.com/questions/2223882/whats-different-between-utf-8-and-utf-8-without-bom –
あなたはおそらくファイルを示し、それは」doesnの助けてください。 BOMは議論の余地がありますが、UNIX OSはutf-8を採用していますが、ほとんどのユーティリティはBOMを適切に処理できません。 Encoding.UTF8を渡すときは、BOMを検出するためにFileクラスに任せておきます。実際のファイル内容で16進ダンプを更新します。 –
アラビア文字と思われるバイトは、実際にはその文字の正しいUTF8表現ですか?私は非常に頻繁にUTF8として渡される文字を見ましたが、実際には別の文字セット(ISO-8859-6やWindows-1256など)のバイトです。これは、このような表示の問題につながります。 –