В нашем приложении есть функция «Загрузить в Word».Вместо того, чтобы создавать настоящий двоичный файл .doc, мы создаем документ HTML и устанавливаем тип MIME, чтобы указать, что это документ 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 - это тело документа, поэтому он будет содержать что-то вроде:
<p>This is the first paragraph.</p>
Все вышеперечисленное прекрасно работает, пока мы не введем символы Unicode в htmlSource.Если htmlSource содержит
<p>这是一个测试</p>
, то в документе Word мы получаем
这是一个测试
Мы попытались заменить Encoding.UTF8 на Encoding.Unicode и Encoding.UTF32, но в обоих случаях Word заканчиваетсядо отображения всей разметки с нулем / пробелом между каждым символом (и китайские строки по-прежнему не отображаются правильно).
Я также пытался использовать Server.HtmlEncode для китайской строки, но это дает мнеобратно ту же строку китайских символов.
Я не знаю, как решить эту проблему.