ASP.NET : caractères non standard - équivalent binaire
4 réponses
Gilbert Tordeur
Bonjour.
Existe-t-il une classe sous VB2008 qui permettrait de convertir tout
caractère spécial (lettre accentuée, etc) en son équivalent numérique (é
pour é) par exemple ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrice
Bonjour,
Voir http://msdn.microsoft.com/fr-fr/library/system.web.httpserverutility.htmlencode.aspx (Server.HtmlEncode dans le "code-behind" d'une page ASPX...
Si cela ne semble pas faire l'affaire, préciser le contexte...
-- Patrice
"Gilbert Tordeur" a écrit dans le message de groupe de discussion :
Bonjour.
Existe-t-il une classe sous VB2008 qui permettrait de convertir tout caractère spécial (lettre accentuée, etc) en son équivalent numérique (é pour é) par exemple ?
Merci d'avance, Gilbert
Bonjour,
Voir
http://msdn.microsoft.com/fr-fr/library/system.web.httpserverutility.htmlencode.aspx
(Server.HtmlEncode dans le "code-behind" d'une page ASPX...
Si cela ne semble pas faire l'affaire, préciser le contexte...
--
Patrice
"Gilbert Tordeur" <gilbert.tordeur@orange.fr> a écrit dans le message de
groupe de discussion : uCX8CXKAKHA.1536@TK2MSFTNGP05.phx.gbl...
Bonjour.
Existe-t-il une classe sous VB2008 qui permettrait de convertir tout
caractère spécial (lettre accentuée, etc) en son équivalent numérique
(é pour é) par exemple ?
Voir http://msdn.microsoft.com/fr-fr/library/system.web.httpserverutility.htmlencode.aspx (Server.HtmlEncode dans le "code-behind" d'une page ASPX...
Si cela ne semble pas faire l'affaire, préciser le contexte...
-- Patrice
"Gilbert Tordeur" a écrit dans le message de groupe de discussion :
Bonjour.
Existe-t-il une classe sous VB2008 qui permettrait de convertir tout caractère spécial (lettre accentuée, etc) en son équivalent numérique (é pour é) par exemple ?
Merci d'avance, Gilbert
Gilbert Tordeur
Bonjour Patrice, et merci pour ta réponse.
Mais elle ne résout pas mon souci, j'entre donc dans les détails :
J'ai une page ASP 2008 qui affiche une GridView, et un bouton permettant à l'utilisateur de télécharger une feuille Excel avec le contenu de cette GridView. En voici le code (à partir d'un exemple trouvé sur Internet) :
Private Sub BtnExportExcel_Click(ByVal sender As Object _ , ByVal e As System.EventArgs) _ Handles BtnExportExcel.Click Call PreparerGrille(GvDemande) Call ExporterGrille() End Sub
Private Sub ExporterGrille() ' Exportation proprement dite Dim FeuilleExcel As String = "attachment; filenameÞmandesCaution.xls" Response.ClearContent() Response.AddHeader("content-disposition", FeuilleExcel) Response.ContentType = "application/ms-excel" Dim Sw = New StringWriter() Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw) ' Créer une nouvelle Form pour contenir la grille Dim F As New HtmlForm GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet GvDemande.Parent.Controls.Add(F) F.Attributes("runat") = "server" F.Controls.Add(GvDemande) F.RenderControl(Htw) 'GvDemande.RenderControl(Htw) Dim s As String = Sw.ToString() 's = Server.HtmlEncode(s) 's = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë") Response.Write(s) Response.End() End Sub
Private Sub PreparerGrille(ByVal c As Control) ' Préparation (changement de certaines colonnes) For i As Integer = 0 To c.Controls.Count - 1 Dim ci As Control = c.Controls(i) If TypeOf (ci) Is LinkButton Then Dim Literal As New Literal Literal.Text = DirectCast(ci, LinkButton).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) ElseIf TypeOf (ci) Is HyperLink Then Dim Literal As New Literal Literal.Text = DirectCast(ci, HyperLink).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) End If If ci.HasControls Then Call PreparerGrille(ci) End If Next End Sub
À l'exécution, je constate que certains textes comportant des lettres accentuées sont correctement affichés dans Excel, alors que d'autres pas. L'utilisation de l'instruction «s = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë")» résout ce problème pour certains caractères, mais la liste exhaustive des remplacements est longue et c'est pourquoi je cherche une méthode toute faite.
Gilbert
Bonjour Patrice, et merci pour ta réponse.
Mais elle ne résout pas mon souci, j'entre donc dans les détails :
J'ai une page ASP 2008 qui affiche une GridView, et un bouton permettant à
l'utilisateur de télécharger une feuille Excel avec le contenu de cette
GridView. En voici le code (à partir d'un exemple trouvé sur Internet) :
Private Sub BtnExportExcel_Click(ByVal sender As Object _
, ByVal e As System.EventArgs) _
Handles BtnExportExcel.Click
Call PreparerGrille(GvDemande)
Call ExporterGrille()
End Sub
Private Sub ExporterGrille()
' Exportation proprement dite
Dim FeuilleExcel As String = "attachment;
filenameÞmandesCaution.xls"
Response.ClearContent()
Response.AddHeader("content-disposition", FeuilleExcel)
Response.ContentType = "application/ms-excel"
Dim Sw = New StringWriter()
Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw)
' Créer une nouvelle Form pour contenir la grille
Dim F As New HtmlForm
GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet
GvDemande.Parent.Controls.Add(F)
F.Attributes("runat") = "server"
F.Controls.Add(GvDemande)
F.RenderControl(Htw)
'GvDemande.RenderControl(Htw)
Dim s As String = Sw.ToString()
's = Server.HtmlEncode(s)
's = s.Replace("à", "è").Replace("é", "é").Replace("ë",
"ë")
Response.Write(s)
Response.End()
End Sub
Private Sub PreparerGrille(ByVal c As Control)
' Préparation (changement de certaines colonnes)
For i As Integer = 0 To c.Controls.Count - 1
Dim ci As Control = c.Controls(i)
If TypeOf (ci) Is LinkButton Then
Dim Literal As New Literal
Literal.Text = DirectCast(ci, LinkButton).Text
c.Controls.Remove(ci)
c.Controls.AddAt(i, Literal)
ElseIf TypeOf (ci) Is HyperLink Then
Dim Literal As New Literal
Literal.Text = DirectCast(ci, HyperLink).Text
c.Controls.Remove(ci)
c.Controls.AddAt(i, Literal)
End If
If ci.HasControls Then
Call PreparerGrille(ci)
End If
Next
End Sub
À l'exécution, je constate que certains textes comportant des lettres
accentuées sont correctement affichés dans Excel, alors que d'autres pas.
L'utilisation de l'instruction «s = s.Replace("à", "è").Replace("é",
"é").Replace("ë", "ë")» résout ce problème pour certains caractères,
mais la liste exhaustive des remplacements est longue et c'est pourquoi je
cherche une méthode toute faite.
Mais elle ne résout pas mon souci, j'entre donc dans les détails :
J'ai une page ASP 2008 qui affiche une GridView, et un bouton permettant à l'utilisateur de télécharger une feuille Excel avec le contenu de cette GridView. En voici le code (à partir d'un exemple trouvé sur Internet) :
Private Sub BtnExportExcel_Click(ByVal sender As Object _ , ByVal e As System.EventArgs) _ Handles BtnExportExcel.Click Call PreparerGrille(GvDemande) Call ExporterGrille() End Sub
Private Sub ExporterGrille() ' Exportation proprement dite Dim FeuilleExcel As String = "attachment; filenameÞmandesCaution.xls" Response.ClearContent() Response.AddHeader("content-disposition", FeuilleExcel) Response.ContentType = "application/ms-excel" Dim Sw = New StringWriter() Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw) ' Créer une nouvelle Form pour contenir la grille Dim F As New HtmlForm GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet GvDemande.Parent.Controls.Add(F) F.Attributes("runat") = "server" F.Controls.Add(GvDemande) F.RenderControl(Htw) 'GvDemande.RenderControl(Htw) Dim s As String = Sw.ToString() 's = Server.HtmlEncode(s) 's = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë") Response.Write(s) Response.End() End Sub
Private Sub PreparerGrille(ByVal c As Control) ' Préparation (changement de certaines colonnes) For i As Integer = 0 To c.Controls.Count - 1 Dim ci As Control = c.Controls(i) If TypeOf (ci) Is LinkButton Then Dim Literal As New Literal Literal.Text = DirectCast(ci, LinkButton).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) ElseIf TypeOf (ci) Is HyperLink Then Dim Literal As New Literal Literal.Text = DirectCast(ci, HyperLink).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) End If If ci.HasControls Then Call PreparerGrille(ci) End If Next End Sub
À l'exécution, je constate que certains textes comportant des lettres accentuées sont correctement affichés dans Excel, alors que d'autres pas. L'utilisation de l'instruction «s = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë")» résout ce problème pour certains caractères, mais la liste exhaustive des remplacements est longue et c'est pourquoi je cherche une méthode toute faite.
Gilbert
Patrice
Le problème est que seules les données sont à encoder pas l'intégralité de la page sinon j'imagine que Excel affiche le code HTML de la page (car ce n'est plus une page HTML !).
Il faudrait donc intervenir en amont au moment de l'affichage des données par les contrôles présents dans la grille (je crois que les contrôles "boundfield" comportent une propriété HtmlEncode qui permet de contrôler ce comportement, cela pourrait expliquer la différence de comportement que tu vois selon le contrôle utilisé pour afficher les données dans la grille).
Une autre solution pourrait être d'encadrer le code HTML envoyé par Excel avec les balises html/body habituelles et de préciser dans une balise META le jeu de caractères utilisé. Il se pourrait qu'Excel exploite cette information (pas essayé). Pour tester ce dernier cas, le plus simple serait sans doute de faire un bête fichier texte pour tester le principe...
-- Patrice
"Gilbert Tordeur" a écrit dans le message de groupe de discussion :
Bonjour Patrice, et merci pour ta réponse.
Mais elle ne résout pas mon souci, j'entre donc dans les détails :
J'ai une page ASP 2008 qui affiche une GridView, et un bouton permettant à l'utilisateur de télécharger une feuille Excel avec le contenu de cette GridView. En voici le code (à partir d'un exemple trouvé sur Internet) :
Private Sub BtnExportExcel_Click(ByVal sender As Object _ , ByVal e As System.EventArgs) _ Handles BtnExportExcel.Click Call PreparerGrille(GvDemande) Call ExporterGrille() End Sub
Private Sub ExporterGrille() ' Exportation proprement dite Dim FeuilleExcel As String = "attachment; filenameÞmandesCaution.xls" Response.ClearContent() Response.AddHeader("content-disposition", FeuilleExcel) Response.ContentType = "application/ms-excel" Dim Sw = New StringWriter() Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw) ' Créer une nouvelle Form pour contenir la grille Dim F As New HtmlForm GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet GvDemande.Parent.Controls.Add(F) F.Attributes("runat") = "server" F.Controls.Add(GvDemande) F.RenderControl(Htw) 'GvDemande.RenderControl(Htw) Dim s As String = Sw.ToString() 's = Server.HtmlEncode(s) 's = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë") Response.Write(s) Response.End() End Sub
Private Sub PreparerGrille(ByVal c As Control) ' Préparation (changement de certaines colonnes) For i As Integer = 0 To c.Controls.Count - 1 Dim ci As Control = c.Controls(i) If TypeOf (ci) Is LinkButton Then Dim Literal As New Literal Literal.Text = DirectCast(ci, LinkButton).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) ElseIf TypeOf (ci) Is HyperLink Then Dim Literal As New Literal Literal.Text = DirectCast(ci, HyperLink).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) End If If ci.HasControls Then Call PreparerGrille(ci) End If Next End Sub
À l'exécution, je constate que certains textes comportant des lettres accentuées sont correctement affichés dans Excel, alors que d'autres pas. L'utilisation de l'instruction «s = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë")» résout ce problème pour certains caractères, mais la liste exhaustive des remplacements est longue et c'est pourquoi je cherche une méthode toute faite.
Gilbert
Le problème est que seules les données sont à encoder pas l'intégralité de
la page sinon j'imagine que Excel affiche le code HTML de la page (car ce
n'est plus une page HTML !).
Il faudrait donc intervenir en amont au moment de l'affichage des données
par les contrôles présents dans la grille (je crois que les contrôles
"boundfield" comportent une propriété HtmlEncode qui permet de contrôler ce
comportement, cela pourrait expliquer la différence de comportement que tu
vois selon le contrôle utilisé pour afficher les données dans la grille).
Une autre solution pourrait être d'encadrer le code HTML envoyé par Excel
avec les balises html/body habituelles et de préciser dans une balise META
le jeu de caractères utilisé. Il se pourrait qu'Excel exploite cette
information (pas essayé). Pour tester ce dernier cas, le plus simple serait
sans doute de faire un bête fichier texte pour tester le principe...
--
Patrice
"Gilbert Tordeur" <gilbert.tordeur@orange.fr> a écrit dans le message de
groupe de discussion : ejvlHaUAKHA.5020@TK2MSFTNGP04.phx.gbl...
Bonjour Patrice, et merci pour ta réponse.
Mais elle ne résout pas mon souci, j'entre donc dans les détails :
J'ai une page ASP 2008 qui affiche une GridView, et un bouton permettant à
l'utilisateur de télécharger une feuille Excel avec le contenu de cette
GridView. En voici le code (à partir d'un exemple trouvé sur Internet) :
Private Sub BtnExportExcel_Click(ByVal sender As Object _
, ByVal e As System.EventArgs) _
Handles BtnExportExcel.Click
Call PreparerGrille(GvDemande)
Call ExporterGrille()
End Sub
Private Sub ExporterGrille()
' Exportation proprement dite
Dim FeuilleExcel As String = "attachment;
filenameÞmandesCaution.xls"
Response.ClearContent()
Response.AddHeader("content-disposition", FeuilleExcel)
Response.ContentType = "application/ms-excel"
Dim Sw = New StringWriter()
Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw)
' Créer une nouvelle Form pour contenir la grille
Dim F As New HtmlForm
GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet
GvDemande.Parent.Controls.Add(F)
F.Attributes("runat") = "server"
F.Controls.Add(GvDemande)
F.RenderControl(Htw)
'GvDemande.RenderControl(Htw)
Dim s As String = Sw.ToString()
's = Server.HtmlEncode(s)
's = s.Replace("à", "è").Replace("é", "é").Replace("ë",
"ë")
Response.Write(s)
Response.End()
End Sub
Private Sub PreparerGrille(ByVal c As Control)
' Préparation (changement de certaines colonnes)
For i As Integer = 0 To c.Controls.Count - 1
Dim ci As Control = c.Controls(i)
If TypeOf (ci) Is LinkButton Then
Dim Literal As New Literal
Literal.Text = DirectCast(ci, LinkButton).Text
c.Controls.Remove(ci)
c.Controls.AddAt(i, Literal)
ElseIf TypeOf (ci) Is HyperLink Then
Dim Literal As New Literal
Literal.Text = DirectCast(ci, HyperLink).Text
c.Controls.Remove(ci)
c.Controls.AddAt(i, Literal)
End If
If ci.HasControls Then
Call PreparerGrille(ci)
End If
Next
End Sub
À l'exécution, je constate que certains textes comportant des lettres
accentuées sont correctement affichés dans Excel, alors que d'autres pas.
L'utilisation de l'instruction «s = s.Replace("à", "è").Replace("é",
"é").Replace("ë", "ë")» résout ce problème pour certains
caractères, mais la liste exhaustive des remplacements est longue et c'est
pourquoi je cherche une méthode toute faite.
Le problème est que seules les données sont à encoder pas l'intégralité de la page sinon j'imagine que Excel affiche le code HTML de la page (car ce n'est plus une page HTML !).
Il faudrait donc intervenir en amont au moment de l'affichage des données par les contrôles présents dans la grille (je crois que les contrôles "boundfield" comportent une propriété HtmlEncode qui permet de contrôler ce comportement, cela pourrait expliquer la différence de comportement que tu vois selon le contrôle utilisé pour afficher les données dans la grille).
Une autre solution pourrait être d'encadrer le code HTML envoyé par Excel avec les balises html/body habituelles et de préciser dans une balise META le jeu de caractères utilisé. Il se pourrait qu'Excel exploite cette information (pas essayé). Pour tester ce dernier cas, le plus simple serait sans doute de faire un bête fichier texte pour tester le principe...
-- Patrice
"Gilbert Tordeur" a écrit dans le message de groupe de discussion :
Bonjour Patrice, et merci pour ta réponse.
Mais elle ne résout pas mon souci, j'entre donc dans les détails :
J'ai une page ASP 2008 qui affiche une GridView, et un bouton permettant à l'utilisateur de télécharger une feuille Excel avec le contenu de cette GridView. En voici le code (à partir d'un exemple trouvé sur Internet) :
Private Sub BtnExportExcel_Click(ByVal sender As Object _ , ByVal e As System.EventArgs) _ Handles BtnExportExcel.Click Call PreparerGrille(GvDemande) Call ExporterGrille() End Sub
Private Sub ExporterGrille() ' Exportation proprement dite Dim FeuilleExcel As String = "attachment; filenameÞmandesCaution.xls" Response.ClearContent() Response.AddHeader("content-disposition", FeuilleExcel) Response.ContentType = "application/ms-excel" Dim Sw = New StringWriter() Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw) ' Créer une nouvelle Form pour contenir la grille Dim F As New HtmlForm GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet GvDemande.Parent.Controls.Add(F) F.Attributes("runat") = "server" F.Controls.Add(GvDemande) F.RenderControl(Htw) 'GvDemande.RenderControl(Htw) Dim s As String = Sw.ToString() 's = Server.HtmlEncode(s) 's = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë") Response.Write(s) Response.End() End Sub
Private Sub PreparerGrille(ByVal c As Control) ' Préparation (changement de certaines colonnes) For i As Integer = 0 To c.Controls.Count - 1 Dim ci As Control = c.Controls(i) If TypeOf (ci) Is LinkButton Then Dim Literal As New Literal Literal.Text = DirectCast(ci, LinkButton).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) ElseIf TypeOf (ci) Is HyperLink Then Dim Literal As New Literal Literal.Text = DirectCast(ci, HyperLink).Text c.Controls.Remove(ci) c.Controls.AddAt(i, Literal) End If If ci.HasControls Then Call PreparerGrille(ci) End If Next End Sub
À l'exécution, je constate que certains textes comportant des lettres accentuées sont correctement affichés dans Excel, alors que d'autres pas. L'utilisation de l'instruction «s = s.Replace("à", "è").Replace("é", "é").Replace("ë", "ë")» résout ce problème pour certains caractères, mais la liste exhaustive des remplacements est longue et c'est pourquoi je cherche une méthode toute faite.
Gilbert
Gilbert Tordeur
Bien vu !
Toutes mes colonnes BoundField sont bien affichées. Ce sont les TemplateField qui posent problème, et elles ne disposent pas d'une propriété HtmlEncode.
J'ai approfondi ton conseil d'encadrer le code HTML, et ça marche. Voir le code ci-après.
Private Sub BtnExportExcel_Click(ByVal sender As Object _ , ByVal e As System.EventArgs) _ Handles BtnExportExcel.Click Call PreparerGrille(GvDemande) Call ExporterGrille() End Sub
Private Sub ExporterGrille() ' Exportation proprement dite Dim FeuilleExcel As String = "attachment; filenameÞmandesCaution.xls" Response.ClearContent() Response.AddHeader("content-disposition", FeuilleExcel) Response.ContentType = "application/ms-excel" Dim Sw = New StringWriter() Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw) ' Créer une nouvelle Form pour contenir la grille Dim F As New HtmlForm GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet GvDemande.Parent.Controls.Add(F) F.Attributes("runat") = "server" F.Controls.Add(GvDemande) F.RenderControl(Htw) 'GvDemande.RenderControl(Htw) Dim s As String = Sw.ToString() s = TxtHtmlDebut & s & TxtHtmlFin Response.Write(s) Response.End() End Sub
Bien vu !
Toutes mes colonnes BoundField sont bien affichées. Ce sont les
TemplateField qui posent problème, et elles ne disposent pas d'une propriété
HtmlEncode.
J'ai approfondi ton conseil d'encadrer le code HTML, et ça marche. Voir le
code ci-après.
Private Sub BtnExportExcel_Click(ByVal sender As Object _
, ByVal e As System.EventArgs) _
Handles BtnExportExcel.Click
Call PreparerGrille(GvDemande)
Call ExporterGrille()
End Sub
Private Sub ExporterGrille()
' Exportation proprement dite
Dim FeuilleExcel As String = "attachment;
filenameÞmandesCaution.xls"
Response.ClearContent()
Response.AddHeader("content-disposition", FeuilleExcel)
Response.ContentType = "application/ms-excel"
Dim Sw = New StringWriter()
Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw)
' Créer une nouvelle Form pour contenir la grille
Dim F As New HtmlForm
GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet
GvDemande.Parent.Controls.Add(F)
F.Attributes("runat") = "server"
F.Controls.Add(GvDemande)
F.RenderControl(Htw)
'GvDemande.RenderControl(Htw)
Dim s As String = Sw.ToString()
s = TxtHtmlDebut & s & TxtHtmlFin
Response.Write(s)
Response.End()
End Sub
Toutes mes colonnes BoundField sont bien affichées. Ce sont les TemplateField qui posent problème, et elles ne disposent pas d'une propriété HtmlEncode.
J'ai approfondi ton conseil d'encadrer le code HTML, et ça marche. Voir le code ci-après.
Private Sub BtnExportExcel_Click(ByVal sender As Object _ , ByVal e As System.EventArgs) _ Handles BtnExportExcel.Click Call PreparerGrille(GvDemande) Call ExporterGrille() End Sub
Private Sub ExporterGrille() ' Exportation proprement dite Dim FeuilleExcel As String = "attachment; filenameÞmandesCaution.xls" Response.ClearContent() Response.AddHeader("content-disposition", FeuilleExcel) Response.ContentType = "application/ms-excel" Dim Sw = New StringWriter() Dim Htw As HtmlTextWriter = New HtmlTextWriter(Sw) ' Créer une nouvelle Form pour contenir la grille Dim F As New HtmlForm GvDemande.RowStyle.BorderStyle = BorderStyle.NotSet GvDemande.Parent.Controls.Add(F) F.Attributes("runat") = "server" F.Controls.Add(GvDemande) F.RenderControl(Htw) 'GvDemande.RenderControl(Htw) Dim s As String = Sw.ToString() s = TxtHtmlDebut & s & TxtHtmlFin Response.Write(s) Response.End() End Sub