ASP.NET : caractères non standard - équivalent binaire

Le
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 (&#233
pour é) par exemple ?

Merci d'avance,
Gilbert
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #19730691
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" 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
(&#233 pour é) par exemple ?

Merci d'avance,
Gilbert



Gilbert Tordeur
Le #19734641
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("à", "&#232").Replace("é", "&#233").Replace("ë",
"&#235")
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("à", "&#232").Replace("é",
"&#233").Replace("ë", "&#235")» 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 #19735181
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" 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("à", "&#232").Replace("é", "&#233").Replace("ë",
"&#235")
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("à", "&#232").Replace("é",
"&#233").Replace("ë", "&#235")» 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
Le #19735781
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.

Merci,
Gilbert

Private Const TxtHtmlDebut As String = "<html> " _
& "<head>" _
& "<meta http-equiv=""Content-Language"" content=""fr"">" _
& "<meta http-equiv=""content-type"" content=""text/html;
charset=UTF-8"" />" _
& "</head>" _
& "<body>"
Private Const TxtHtmlFin As String = "</body></html>"

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
Publicité
Poster une réponse
Anonyme