我正在尝试使用从数据库中获取的值填充.rtf格式的模板字段。模板(template.rtf)格式如下:
我的名字是@name,我是@age 岁。
在函数(用 c# 编写)中,我执行以下操作:
protected void function(object sender, EventArgs e)
{
// Obtenemos los datos y los asignamos a variables
Response.ContentType = "text/rtf";
Response.Headers.Add("Content-Disposition", "attachment; filename=\"documento.rtf\"");
var f = new StringBuilder(System.IO.File.ReadAllText(Server.MapPath("~/ruta/plantilla.rtf")));
f.Replace("@nombre", nombre); // nombre = "Óscar"
f.Replace("@edad", edad); // edad = "20"
Response.Write(f);
Response.End();
}
整个过程正常,我在插入带有特殊字符的文本时遇到了问题,如我刚刚通过(nombre = "Óscar"
)的示例,因为生成的文档如下:
我叫奥斯卡,今年 20 岁。
我怎样才能解决这个问题?
你必须做三件事。一方面,在读取文件时,
rtf
请确保将其读取为UTF-8
:另一方面,请确保以下内容相同
Response
:最后,检查文件
rtf
是否已经编码为ANSI
而不是UTF-8
.由于无法修改模板的编码,我选择在写入字符之前对其进行编码。如下:
现在我将每个文本字符串发送到函数
codificarString
,该函数又将每个字符发送到函数codificarChar
,返回编码为可读的相应字符ANSI
:正确的写法是这样的: