Ciao a tutti,
ho una pagina web in cui tramite il controllo AsyncFileUpload degli ajaxcontroltoolkit eseguo l'upload di immagini.
Al termine dell'upload vado a leggere i metadata dell'immagine per precompilare il form.
Il mio problema è che nel titolo dell'immagine, quando questo testo viene proposto nella textbox, i caratteri accentati non vengono correttamente codificati e al loro posto trovo un punto di domanda, inoltre mi ritrovo fra una lettera e l'altra una serie di caratteri strani.
Immagino sia un problema di encoding. La codifica utilizzata in tutta l'applicazione è utf-8 ed in nessuna altra parte dell'applicazione ho questo problema.

Alessio Arrigoni - CONSULENTE INFORMATICO
https://www.alessioarrigoni.it
https://www.assistenzapccomo.it
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Alessio,
che libreria usi per leggere i metadati dell'immagine JPG? Posta il codice che stai usando.
Può darsi che la libreria legga il testo usando la codifica sbagliata.

Se ne hai possibilità, dovresti leggere il testo come array di bytes, e poi convertirli in stringa provando di volta in volta codifiche diverse.
//qui usa il metodo che ti restituisce il testo in forma binaria
byte[] testo = .... 
//qui usa il metodo GetString per convertire l'array di bytes in stringa
//prova varie codifiche finché non trovi quella giusta
var testoStringa = System.Text.Encoding.UTF8.GetString(testo);


Se non stai usando alcuna libreria, qui trovi delle informazioni su come leggere i metadati exif.
http://stackoverflow.com/questions/1821515/how-is-exif-info-encoded

ciao,
Moreno

Enjoy learning and just keep making
La classe che utilizzo è la seguente:

Public Class ExifHelper

Private Enum ExifId
DataScatto = 36867
Titolo = 40091
Commenti
Autore
Tag
Oggetto
End Enum

Public Shared Function GetSummaryInfo(ByVal image As Image) As SummaryInfo
Dim ids() As Integer = image.PropertyIdList
Dim si As New SummaryInfo
si.Autore = GetInfo(image, ExifId.Autore)
si.Commenti = GetInfo(image, ExifId.Commenti)
si.Tag = GetInfo(image, ExifId.Tag)
si.Oggetto = GetInfo(image, ExifId.Oggetto)
si.Titolo = GetInfo(image, ExifId.Titolo)
si.DataScatto = GetDate(GetInfo(image, ExifId.DataScatto))
Return si
End Function

Private Shared Function GetInfo(ByVal image As Image, ByVal id As ExifId) As String
Dim index As Integer = Array.IndexOf(image.PropertyIdList, DirectCast(id, Integer))
If index = -1 Then Return String.Empty
Dim item As PropertyItem = image.PropertyItems(index)
'Return Encoding.ASCII.GetString(item.Value).TrimEnd(Chr(0))
Return Encoding.Default.GetString(item.Value).TrimEnd(Chr(0))
End Function

Private Shared Function GetDate(ByVal strDate As String) As Date
Dim arrTemp As String() = strDate.Split(New String() {":", " "}, StringSplitOptions.RemoveEmptyEntries)
Return New DateTime(arrTemp(0).Trim, arrTemp(1).Trim, arrTemp(2).Trim, arrTemp(3).Trim, arrTemp(4).Trim, arrTemp(5).Trim)
End Function

End Class

Con la sostituzione della seguente riga: Return Encoding.ASCII.GetString(item.Value).TrimEnd(Chr(0))

con Return Encoding.Default.GetString(item.Value).TrimEnd(Chr(0))

il problema si è risolto in parte, nel senso che i caratteri speciali (lettere accentate, °, ecc.) vengono codificati correttamente.

Permane però il problema che fra una lettera e l'altra compare un carattere strano a forma di rombo, che qui non riesco a riprodurre però spero di avere reso l'idea.

Alessio Arrigoni - CONSULENTE INFORMATICO
https://www.alessioarrigoni.it
https://www.assistenzapccomo.it
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Alessio,
ok, penso che la strada sia giusta. Hai provato con altre codifiche?
Prova una di queste istruzioni:
Return Encoding.UTF8.GetString(item.Value).TrimEnd(Chr(0))
Return Encoding.Unicode.GetString(item.Value).TrimEnd(Chr(0))
Return Encoding.GetEncoding("iso-8859-1").GetString(item.Value).TrimEnd(Chr(0))


ciao,
Moreno

Enjoy learning and just keep making
La iso-8859-1 è la codifica corretta, in quanto vedo che i caratteri speciali codificati correttamente.
Ottengo lo stesso risultato che mettere default. Permane però il problema della serie di caratteri strami fra un carattere e l'altro :-(.

Alessio Arrigoni - CONSULENTE INFORMATICO
https://www.alessioarrigoni.it
https://www.assistenzapccomo.it
Se può essere utile a qualcuno il problema si è risolto mettendo alla fine un replace(Chr(0), ""):
Encoding.GetEncoding("iso-8859-1").GetString(item.Value).TrimEnd(Chr(0)).Replace(Chr(0), "")

Alessio Arrigoni - CONSULENTE INFORMATICO
https://www.alessioarrigoni.it
https://www.assistenzapccomo.it

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.