为什么一些特殊字符(“Ü”)显示为编码的HTML实体(ü)?

时间:2014-09-04 20:30:46

标签: c# asp.net special-characters

这是我的DetailViewSqlDataSource

<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateRows="False" HeaderText="Rechnung Details" DataKeyNames="InvoiceID" CssClass="table table-striped table-bordered">
    <Fields>
        <asp:BoundField DataField="InvoiceID" HeaderText="Rechnungs Nummer" InsertVisible="False" ReadOnly="True" SortExpression="InvoiceID" />
        <asp:BoundField DataField="Date" HeaderText="Datum" SortExpression="Date" DataFormatString="{0:dd/MM/yyyy}"/>
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ReadOnly="true" />
        <asp:BoundField DataField="Tell" HeaderText="Telefon" SortExpression="Tell" ReadOnly="true" />
        <asp:BoundField DataField="Address" HeaderText="Addresse" SortExpression="Address" ReadOnly="true"/>
        <asp:BoundField DataField="Amount" HeaderText="Betrag" SortExpression="Amount" />
        <asp:BoundField DataField="Paid" HeaderText="Bezahlter Betrag" SortExpression="Paid" />
        <asp:BoundField DataField="Rest" HeaderText="Rest" SortExpression="Rest" ReadOnly="true" />
        <asp:BoundField DataField="PaymentType" HeaderText="Zahlungsart" SortExpression="PaymentType" />
        <asp:CheckBoxField DataField="Shipped" HeaderText="erledigt" SortExpression="Shipped" />
        <asp:BoundField DataField="Comment" HeaderText="Bericht" SortExpression="Comment" ReadOnly="true" />
        <asp:CommandField ShowEditButton="True" />
        <asp:CommandField ShowDeleteButton="True" />
    </Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:RechnungConnectionString %>" 
    SelectCommand="SELECT Invoice.[InvoiceID], Invoice.[CustomerID], Invoice.[Date], Invoice.[Amount], Invoice.[Paid], Invoice.[Rest], Invoice.[PaymentType], Invoice.[Shipped], Customer.[CustomerID], Customer.[Name], Customer.[Tell], Customer.[Address], Customer.[Comment] FROM [Invoice] INNER JOIN [Customer] ON Invoice.[CustomerID] = Customer.[CustomerID] WHERE Invoice.[InvoiceID] = @InvoiceID"
    UpdateCommand="UPDATE [Invoice] SET Invoice.[Date]=@Date, Invoice.[Amount]=@Amount, Invoice.[Paid]=@Paid, Invoice.[PaymentType]=@PaymentType, Invoice.[Shipped]=@Shipped WHERE [InvoiceID]=@InvoiceID"
    DeleteCommand="DELETE FROM Invoice WHERE [InvoiceID] = @InvoiceID">
     <SelectParameters>
      <asp:QueryStringParameter Name="InvoiceID" QueryStringField="ID" />
    </SelectParameters>
</asp:SqlDataSource>

这是我的按钮用于从DetailView的数据创建PDF:

        protected void CreatePDF_Click(object sender, EventArgs e)
    {
        string InvoiceID = DetailsView1.Rows[0].Cells[1].Text;
        string Date = DetailsView1.Rows[1].Cells[1].Text;
        //string Name = DetailsView1.Rows[2].Cells[1].Text;
        StreamReader srn = new StreamReader(DetailsView1.Rows[2].Cells[1].Text, Encoding.GetEncoding("iso-8859-1"));
        string Name = srn.ReadToEnd();
        string Tell = DetailsView1.Rows[3].Cells[1].Text;
        //string Address = DetailsView1.Rows[4].Cells[1].Text;
        StreamReader sra = new StreamReader(DetailsView1.Rows[4].Cells[1].Text, Encoding.GetEncoding("iso-8859-1"));
        string Address = sra.ReadToEnd();
        string Amount = DetailsView1.Rows[5].Cells[1].Text;
        string TimeNow = Convert.ToString(DateTime.Now.Date);




        string pdfpath = Server.MapPath("~/PDF/");
        string imagepath = Server.MapPath("~/Image/AlsterLogo.jpg");
        string pdfName = Name + " Rechnungs Nummer = " + InvoiceID;
        //Response.ContentType = "application/pdf";
        //Response.AddHeader("content-disposition", "attachment;filename=Export.pdf");
        //Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Document pdfDoc = new Document(PageSize.A4, 15f, 15f, 30f, 30f);
        PdfWriter.GetInstance(pdfDoc, new FileStream(Path.Combine(pdfpath, pdfName) + ".pdf" , FileMode.Create));
        pdfDoc.Open();

        iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imagepath);
        jpg.Alignment = Element.ALIGN_CENTER;

        Font arial8U = FontFactory.GetFont("Arial", 8, Font.UNDERLINE, BaseColor.BLACK);
        Font arial8 = FontFactory.GetFont("Arial", 8, BaseColor.BLACK);
        Font arial10 = FontFactory.GetFont("Arial", 10, BaseColor.BLACK);
        Font arial10B = FontFactory.GetFont("Arial", 10, Font.BOLD, BaseColor.BLACK);
        PdfPTable table = new PdfPTable(2);
        table.DefaultCell.Border = Rectangle.NO_BORDER;
        table.TotalWidth = 500f;
        table.LockedWidth = true;
        float[] widths = new float[] { 325f , 175f };
        table.SetWidths(widths);
        PdfPCell cell = new PdfPCell(new Phrase("ASM Transporte Mundsburger Damm 38, 22087 Hamburg", arial8U));
        cell.Border = Rectangle.NO_BORDER;
        PdfPCell cell1 = new PdfPCell(new Phrase("Herr/Frau/Firma", arial10));
        cell1.Border = Rectangle.NO_BORDER;
        PdfPCell cell2 = new PdfPCell(new Phrase("Tel: 040-29 12 12", arial10));
        cell2.Border = Rectangle.NO_BORDER;
        PdfPCell cell3 = new PdfPCell(new Phrase("Fax: 040-29823820", arial10));
        cell3.Border = Rectangle.NO_BORDER;
        PdfPCell cell4 = new PdfPCell(new Phrase("Sachbearbeiter: S.Dadras", arial10));
        cell4.Border = Rectangle.NO_BORDER;
        PdfPCell cell5 = new PdfPCell(new Phrase("mail: dadras@alster-umzuege.de", arial8));
        cell5.Border = Rectangle.NO_BORDER;
        PdfPCell cell6 = new PdfPCell(new Phrase("Rechnung-Nr: " + InvoiceID, arial10B));
        cell6.HorizontalAlignment = 1;
        //cell6.Border = Rectangle.NO_BORDER;
        PdfPCell cell7 = new PdfPCell(new Phrase("Hamburg " + TimeNow, arial10));
        cell7.Border = Rectangle.NO_BORDER;




        table.AddCell(cell);
        table.AddCell("");
        table.AddCell(cell1);
        table.AddCell("");
        table.AddCell(Name);
        table.AddCell(cell2);
        table.AddCell(Address);
        table.AddCell(cell3);
        table.AddCell("");
        table.AddCell(cell4);
        table.AddCell("");
        table.AddCell(cell5);
        table.AddCell("");
        table.AddCell(cell6);
        table.AddCell("");
        table.AddCell(cell7);


        pdfDoc.Add(jpg);
        pdfDoc.Add(table);
        pdfDoc.Close();
    }

问题是当PDF创建它时,它无法读取特殊字符的喜欢Ü!我怎样才能解决这个问题 ?!

1 个答案:

答案 0 :(得分:1)

使用HttpUtility.HtmlDecode(http://msdn.microsoft.com/en-us/library/system.web.httputility.htmldecode(v=vs.110).aspx)不会像在pdf中添加文本一样简单(或至少在你期待特殊字符的地方)

相关问题