2011-07-26 8 views
0

私たちのアプリケーションには「Word to Download」機能があります。実際のバイナリの.docファイルを作成するのではなく、HTMLドキュメントを作成し、そのドキュメントがWordドキュメントであることを示すMIMEタイプを設定します。ここでは、私たちが使用しているメソッドの抜本的なバージョンです。上記の例htmlSourceでHTMLを漢字でWordにダウンロード

private FileContentResult ExportToWord(string htmlSource, string filename) 
{ 
    StringBuilder doc = new StringBuilder(); 

    doc.Append("<html><body>"); 
    doc.Append(htmlSource); 
    doc.Append("</body></html>"); 

    byte[] buffer = Encoding.UTF8.GetBytes(doc.ToString()); 

    FileContentResult result = new FileContentResult(buffer, "application/msword"); 
    result.FileDownloadName = string.Format("{0}.doc", filename); 

    return result; 
} 

それが何か含まれますので、文書の本文です:私たちはhtmlSourceへのUnicode文字を導入するまで、上記の作品のすべてがうまく

<p>This is the first paragraph.</p> 

を。 htmlSourceが

<p>这是一个测试</p> 

が含まれている場合、我々は

这是一个测试 

を取得するWord文書に私たちはEncoding.UnicodeとEncoding.UTF32でEncoding.UTF8を交換しようとしましたが、両方のケースでWordはすべて表示されて終わります各文字の間にヌル/スペースのマークアップ(中国語の文字列はまだ正しく表示されません)。

私はServer.HtmlEncodeを中国語の文字列に対して使用しようとしましたが、それは私に同じ文字列の漢字を返します。

私はこの問題を解決する方法を失っています。

答えて

2

解決策を見つけるのは簡単ではありませんでしたが、実際の実装は非常に簡単でした。これに

byte[] buffer = Encoding.UTF8.GetBytes(doc.ToString()); 

::私達はちょうどこのライン変更

byte[] buffer = Encoding.Unicode.GetPreamble() 
    .Concat(Encoding.Unicode.GetBytes(doc.ToString())) 
    .ToArray(); 

をGetPreamble()メソッドは、その言葉は、ファイルの内容を解釈する方法を知っているファイルにバイトオーダーマークが追加されます。ファイルにUnicodeが含まれているかどうかを確認し、マークアップをドキュメントに表示する代わりに適切に解釈できるようになりました。

関連する問題