1

MS Word オートメーションを使用して、.doc を .htm に保存しました。.doc ファイルに箇条書き文字がある場合、それらは .htm に正常に保存されますが、.htm ファイルを文字列に読み込もうとすると (そのため、後で最終的に格納するためにデータベースに送信して、文字列ではなく文字列として保存できます)。ブロブ)、箇条書きは、文字列への読み込みに使用されるエンコーディングに応じて、疑問符またはその他の文字に変換されます。

私はこれを使ってテキストを読んでいます:

string html = File.ReadAllText(myFileSpec);

StreamReader も使用してみましたが、同じ結果が得られました (File.ReadAllText によって内部的に使用されている可能性があります)。

また、File.ReadAllText の 2 番目のオーバーロードですべての種類のエンコーディングを指定しようとしました。

string html = File.ReadAllText(originalFile, Encoding.ASCII);

Encoding タイプで使用可能なすべての列挙型を試しました。

何か案は?

4

5 に答える 5

3

私のシステム (US-English を使用) では、Word は *.htm ファイルを Windows-1252 コードページで保存します。あなたのシステムがそのコードページを使用している場合、それはあなたがそれを読むべきものです。

string html = File.ReadAllText(originalFile, Encoding.GetEncoding(1252));

また、使用しているビューが何であれ、結果がクエスチョン マークを作成している可能性もありますが、それも確認してください。

于 2008-11-07T20:37:34.187 に答える
0

OK、どうやら私は私の最初の声明で嘘をついた。私はすべてのエンコーディングを試したと思いましたが、これは試していませんでした。

data = File.ReadAllText(tempFile, Encoding.Default);

エンコーディングを指定しないこのメソッドのオーバーロードは、デフォルトのエンコーディングがEncoding.Defaultであると想定して、問題なく機能すると思います。ただし、実際にはデフォルトでEncoding.UTF8を使用します。これが他の誰かに役立つことを願っています。

于 2008-11-07T21:06:57.560 に答える
0

Word の.doc変換.htmlによって箇条書きがクエスチョン マークに変わってしまうのは問題ではありませんか (それとは何の関係もありませんFile.ReadAllText) StreamReader

つまり、そこにたどり着くまでFile.ReadAllTextに、すでに疑問符になっています。

Word 2003 でシンプルな Word リストを HTML に変換すると、

 <ul style='margin-top:0cm' type=disc> 
     <li class=MsoNormal style='mso-list:l0 level1 lfo1;tab-stops:list 36.0pt'>
       <span lang=EN-GB style='mso-ansi-language:EN-GB'>Test 1</span>
     </li> 
     <li class=MsoNormal style='mso-list:l0 level1 lfo1;tab-stops:list 36.0pt'>
       <span lang=EN-GB style='mso-ansi-language:EN-GB'>Test 2</span>
     </li> 
 </ul>

醜いけどクエスチョンマークになりそうなものは入っていない

于 2008-11-07T19:54:31.123 に答える
0

これらの文字は、HTML ファイルではどのように表示されますか? このファイルのエンコード宣言 (メタ タグ「Content-Type」内) は何ですか? 理想的には、これらの文字はエンティティまたは UTF-8 文字に変換する必要があります。
これらの質問に答えると、解決策につながる可能性があります... :-)

于 2008-11-07T19:59:56.853 に答える
0

ファイルをバイナリモードで開いてみましたか。テストモードで開くと、Unicode 文字が切り刻まれると思います。

于 2008-11-07T18:51:16.070 に答える