Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200

    [VB.NET] Convertire memorystream in stringa

    Ciao a tutti, in luogo di una comunicazione client/server stò cercando di trovare il modo di convertire una memorystream (risultato di una serializzazione) in una stringa di caratteri per la successiva trasmissione al client.

    Dovrebbe forse essere possibile utilizzare il metodo "Decoder" della System.text o qualcosa di simile.

    Qualcuno ha già avuto a che fare con tale problematica? Potrebbe in tal caso darmi un suggerimento? Grazie.

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    encoding.default.getString

  3. #3
    Il metodo più veloce è:

    codice:
    Se MS è il tuo memorystream
    
    Dim buffer(MS.Length) As Byte
    
    MS.Read(buffer, 0, MS.Length)
    
    dim MyString as String = System.Text.Encoding.UTF8.GetString(buffer)
    
    MS.close
    tuttavia sei soggetto alla codifica UTF8 (in questo caso) che potrebbe decodificarti male alcuni caratteri, come il § o altri.
    Io per ovviare a questo problema generalmente uso questa funzioncina:

    codice:
    Se MS è il tuo memorystream
    
    Dim buff(1024) As Byte
    Dim nbytes = -1
    Dim Stringa As String = ""
    
    While nbytes <> 0
    
            nbytes = MS.Read(buff, 0, buff.Length)
    
            If nbytes = 0 Then Exit While
    
            For Each SingoloByte As Byte In buff
                 If SingoloByte = 0 Then Exit For
                 Stringa += Chr(SingoloByte)
            Next
    
    End While
    
    MS.Close()

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Grazie per la solerte risposta. C'ero andato vicino in fin dei conti. Adesso faccio delle prove. Ma come hai fatto a scoprire che il primo metodo potrebbe non convertire adeguatamente alcuni caratteri quale il "§"?

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    perchè l'utf-8 non è unicode quindi con contiene tutti i caratteri... io userei il default se i sistemi client e server usano la stessa codifica (es sono entrambi win)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Originariamente inviato da Stoicenko
    perchè l'utf-8 non è unicode quindi con contiene tutti i caratteri... io userei il default se i sistemi client e server usano la stessa codifica (es sono entrambi win)
    Capisco, preferirei tuttavia sfruttare il CLR per rendere l'applicazione portabile anche negli altri SO. Proverò allora con il secondo metodo visto che non c'è alternativa. Grazie.

  7. #7
    Originariamente inviato da Stoicenko
    perchè l'utf-8 non è unicode quindi con contiene tutti i caratteri... io userei il default se i sistemi client e server usano la stessa codifica (es sono entrambi win)
    Scusa Stoicenko, non è per polemizzare ma UTF-8 è un acronimo e significa "Unicode Transformation Format - 8" ed è una modalità di rappresentazione dati particolare ma facente parte dello standard unicode. Giusto?

    Personalmente io preferisco codificare sia da lato client, sia da lato server secondo la codifica UTF-8 (che contiente tutti i caratteri, compreso §), in modo da essere indipendente dal SO (la codifica windows è diversa dalla codifica linux) e quindi fare tranquillamente
    codice:
    System.Text.Encoding.UTF8.GetString(buffer)
    .

    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  8. #8
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    giusto ma unicode non è una codifica, è una rappresentazione numerica dei caratteri.. utf-8 usa un tot di byte (non ricordo se 2 o 4 oggi sono smemorato) e non contiene tutti gli elementi di unicode.. per questo è sempere buona norma avere un parallelismo sulle codifiche tra client e server...

  9. #9
    Originariamente inviato da Stoicenko
    giusto ma unicode non è una codifica, è una rappresentazione numerica dei caratteri.. utf-8 usa un tot di byte (non ricordo se 2 o 4 oggi sono smemorato) e non contiene tutti gli elementi di unicode.. per questo è sempere buona norma avere un parallelismo sulle codifiche tra client e server...
    Si, ne usa da 1 a 4 in dipendenza del tipo di dato (sono 4 ottetti al massimo). Ma che io sappia contiene pressoché tutti i caratteri delle lingue occidentali, quindi va più che bene. Se poi si ha il parallelismo su entrambi i PC è indubbiamente il migliore dei casi.

    Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)

    C# programming and other stuffs

  10. #10
    il fatto è che però l'autore del thread ha specificato che il memorystream è il risultato di una serializzazione, quindi a meno che non si conosca bene il sistema di codifica che usa la serializzazione non si può essere certi dei caratteri che troveremo nel memorystream. Non sapendo nè leggere nè scrivere personalmente andrei rozzamente di CHR e taglierei la testa al toro senza correre il rischio di incappare in un byte che la decodifica utilizzata non saprebbe interpretare..

    ma a questo punto la domanda mi sorge spontanea... che ci devi fare con questa stringa una volta ottenuta? Perchè nel caso tu la voglia salvare in un file (cosa comune quando si utilizza la serializzazione) non hai assolutamente bisogno si una stringa, ma passi direttamente l'array di byte ad un filestream e scrivi con quello, risparmiandoti ste rogne

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.