Quantcast
Channel: Active questions tagged utf-8 - Stack Overflow
Viewing all articles
Browse latest Browse all 1230

En dash or Em dash getting converted to ? in C# while transforming a text for Email

$
0
0

I am trying to convert the values

—–à, è, ì, ò, ù, À, È, Ì, Ò, Ùá, é, í, ó, ú, ý, Á, É, Í, Ó, Ú, Ý

In the email I get it as

? ? à, è, ì, ò, ù, À, È, Ì, Ò, Ùá, é, í, ó, ú, ý, Á, É, Í, Ó, Ú, Ý

The code is as follows:

public string getHtml(int templateID, int incidentID, string userID, int IncidentNotificationID){    TemplateID = templateID;    IncidentID = incidentID;    string htmlToReturn = "<h3>Please select a template to edit</h3>";    try    {        if (templateID != -1)        {            XslTransformHelper(templateID);            using (var transformedStream = CreateTransformMemoryStream(templateID,                       GenerateXML(templateID, incidentID, userID, IncidentNotificationID)))            {                using (var streamToRead = new MemoryStream(transformedStream.GetBuffer()))                {                    streamToRead.Position = 0;                    if (streamToRead.CanRead && streamToRead.CanSeek)                    {                        byte[] myBytes = new byte[Convert.ToInt32(streamToRead.Length)];                        streamToRead.Read(myBytes, 0, Convert.ToInt32(streamToRead.Length));                        streamToRead.Position = 0;                        htmlToReturn = System.Text.Encoding.UTF8.GetString(myBytes);                        htmlToReturn = htmlToReturn.Substring(htmlToReturn.IndexOf("<"));                        htmlToReturn = ReplaceEmailBodyVariables(htmlToReturn);                    }                    else                    {                        throw new Exception("Stream read error while attempting to transform e-mail body. ");                    }                }            }        }    }    catch (Exception ex)    {        htmlToReturn = string.Empty;        WriteLog($"Failed to generate TemplateID: {templateID.ToString()}. {ex.Message} ${ex.StackTrace}");    }    return htmlToReturn;}
  private MemoryStream CreateTransformMemoryStream(int templateID, string XMLString)  {      var outputStream = new MemoryStream();      StringReader rdr = new StringReader(XMLString);      XPathDocument myXPathDocument = new XPathDocument(rdr);      using (var writer = new XmlTextWriter(outputStream, System.Text.Encoding.UTF8))      {          myXSLTransform.Transform(myXPathDocument, writer);      }      return outputStream;  }

From above method it goes to

 private void XslTransformHelper(int templateID) {     var parameters = new[] { new SqlParameter("@TemplateID", templateID) };     string sql ="SELECT (SELECT ISNULL(ParameterValue, '~/xsl') FROM SystemParameter WITH(NOLOCK) WHERE ParameterName = 'XslPath') AS XslPath, ISNULL(FileName, '') AS FileName, ISNULL(DynamicTemplateFlag, 0) AS DynamicTemplateFlag FROM Template WITH(NOLOCK) WHERE TemplateID = @TemplateID";     var myFile = string.Empty;     var db = new BaseDAL();     var systemXSLPath = string.Empty;     var dynamicTemplateFlag = string.Empty;     try     {         using (var reader = db.ExecuteSQLReader(sql, parameters))         {             if (reader.Read())             {                 systemXSLPath = System.Web.Hosting.HostingEnvironment.MapPath(reader["XslPath"].ToString());                 myFile = Path.Combine(                     System.Web.Hosting.HostingEnvironment.MapPath(reader["XslPath"].ToString()),                     reader["FileName"].ToString());                 dynamicTemplateFlag = reader["DynamicTemplateFlag"].ToString();             }         }         if (dynamicTemplateFlag != "1")         {             myXSLTransform.Load(myFile);             return;         }         byte[] bytes = myXSLEncoder.GetBytes(getXSLFileString(templateID, systemXSLPath));         using (var myXslMemoryStream = new MemoryStream(bytes))         {             using (var reader = XmlReader.Create(myXslMemoryStream))             {                 myXSLTransform.Load(reader, null, myXSLResolver);             }         }     }     catch (Exception ex)     {         var additionalInfo = new NameValueCollection         {             { "ErrorCode", "XSLT" }, { "ErrorMessage", ex.Message }         };         throw new Elegrity.EIF.ElegrityException("Transformer unable to instantiate.", additionalInfo);     } }
  private string getXSLFileString(int templateID, string systemXSLPath)  {      var myFile = string.Empty;      var db = new BaseDAL();      var xslTemplate = string.Empty;      var xslTemplateCSSImport = string.Empty;      var xslTemplateCSSCall = string.Empty;      var xslTemplateImport = string.Empty;      StringBuilder xslTemplateCall = new StringBuilder();      var importTag = string.Empty;      var callTemplateTag = string.Empty;      var headerText = string.Empty;      var footerText = string.Empty;      var xslFileName = string.Empty;      var templateBody = string.Empty;      var dfPKey = IncidentID > 0 ? IncidentID : SubjectID;      DataTable drTemplateXSLBody = null;      try      {          Hashtable htable = new Hashtable();          htable.Add("@TemplateID", templateID);          drTemplateXSLBody = new BaseDAL().ExecuteStoredProcDataTable(ref htable, "spGetTemplateXSL");          //Create import tags and call-template tags          for (int i = 0; i < drTemplateXSLBody.Rows.Count; i++)          {              //Reset Variables              importTag = "";              callTemplateTag = "";              headerText = "";              footerText = "";              xslFileName = "";              templateBody = "";              int.TryParse(drTemplateXSLBody.Rows[i]["DFFormID"].ToString(), out int dfFormID);              //Check if subnode is a Dynamic Form              if (dfFormID > 0)              {                  headerText = drTemplateXSLBody.Rows[i]["HeaderText"].ToString();                  footerText = drTemplateXSLBody.Rows[i]["FooterText"].ToString();                  if (!string.IsNullOrEmpty(headerText))                  {                      xslTemplateCall.Append($"<p class=\"headerText\">{headerText}</p>");                  }                  //make call to get rendered Dynamic Form HTML with Header and Footer Text                  HelperResponse dfTemplateResponse = _adapter.GetEmailTemplateHtmlString(dfFormID, dfPKey);                  if (dfTemplateResponse.IsSuccess == false)                  {                      throw new Exception(dfTemplateResponse.ResponseXml);                  }                  else                  {                      xslTemplateCall.Append(dfTemplateResponse.ResponseXml);                  }                  if (!string.IsNullOrEmpty(footerText))                  {                      xslTemplateCall.Append($"<p class=\"footerText\">{footerText}</p>");                  }              }              else              {                  //Set Variables                  xslFileName = drTemplateXSLBody.Rows[i].ItemArray[0].ToString();                  importTag = "<xsl:import href=\"" + systemXSLPath +"\\" + xslFileName +".xsl\"/>";                  callTemplateTag = "<xsl:call-template name=\"" + xslFileName +"\"></xsl:call-template>";                  if (drTemplateXSLBody.Rows[i].ItemArray[1].ToString() != "" &&                      drTemplateXSLBody.Rows[i].ItemArray[1].ToString() != null)                  {                      headerText =                          $"<p class=\"headerText {xslFileName}\"><xsl:value-of disable-output-escaping=\"yes\" select=\"rootXML/DynamicTemplateNodeXML/{xslFileName}_HeaderText\"/></p>";                  }                  if (drTemplateXSLBody.Rows[i].ItemArray[2].ToString() != "" &&                      drTemplateXSLBody.Rows[i].ItemArray[2].ToString() != null)                  {                      footerText =                          $"<p class=\"footerText {xslFileName}\"><xsl:value-of disable-output-escaping=\"yes\" select=\"rootXML/DynamicTemplateNodeXML/{xslFileName}_FooterText\"/></p>";                  }                  //Add TemplateBody to Template                  if (xslFileName == "Dynamic_TemplateBody")                  {                      if (drTemplateXSLBody.Rows[i].ItemArray[3].ToString() != "" &&                          drTemplateXSLBody.Rows[i].ItemArray[3].ToString() != null)                      {                          templateBody =                              $"<p class=\"{xslFileName}\"><xsl:value-of disable-output-escaping=\"yes\" select=\"rootXML/DynamicTemplateNodeXML/{xslFileName}_TemplateBody\"/></p>";                          xslTemplateCall.Append(headerText).Append(templateBody).Append(footerText);                      }                  }                  //This is NOT the Template Body Text subnode                  else                  {                      //Add SubNode to XSL Template                      xslTemplateImport += importTag;                      xslTemplateCall.Append(headerText).Append(callTemplateTag).Append(footerText);                  }              }          }          //Combine Strings to create XSL Template          xslTemplate ="<?xml version=\"1.0\"?><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"+ xslTemplateImport +" <xsl:template match=\"/\"><html><head>"+"</head><body>" + xslTemplateCall +"</body></html></xsl:template></xsl:stylesheet>";      }      catch (Exception ex)      {          //Throw an ElegrityException from data reader...          NameValueCollection additionalInfo = new NameValueCollection();          additionalInfo.Add("ErrorCode", "XSLT");          additionalInfo.Add("ErrorMessage", ex.Message);          throw new ElegrityException("getXSLFileString() Method Failed getting the Template XSL String",              additionalInfo);      }      return xslTemplate;  }

In the xslTemplate variable value is as follows,

<?xml version="1.0"?><xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="/"><html><head/><body><table class="em-col"><tr><td class="w-60">—–à, è, ì, ò, ù, À, È, Ì, Ò, Ùá, é, í, ó, ú, ý, Á, É, Í, Ó, Ú, Ý</td></tr></table></div></body></html></xsl:template>undefined</xsl:stylesheet>

But, in the end, the htmlToReturn variable in getHtml() returns the following

<html><head /><body><table class=\ "em-col\"><tr><td class=\ "w-60\">          ? ? à, è, ì, ò, ù, À, È, Ì, Ò, Ùá, é, í, ó, ú, ý, Á, É, Í, Ó, Ú, Ý</td></tr></table></div></body></html>

Can anyone help with this?


Viewing all articles
Browse latest Browse all 1230

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>