Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    FileReader.ReadLine() : Interpretazione errata di caratteri

    Un banalissimo file di testo (ESEMPIO.TXT) è composto da tante righe che contengono, ad eccezione della prima, un carattere accentato (àèéìòù) o speciale (°).

    Contenuto del file ESEMPIO.TXT:

    Prova
    Provà
    Provè
    Prové
    Provì
    Provò
    Provù
    Prov°

    Se provo ad aprire il file (ometto l'intero codice perché inutile) con il comando...

    WebSitePref = FileReader.ReadLine()

    ...la variabile WebSitePref presenta un valore strano (ad eccezione del primo rigo): ecco quello che compare nella Finestra di controllo immediato dopo la lettura del primo rigo...

    ? WebSitePref
    "Prova"
    ? len(WebSitePref)
    5


    ...e dopo la lettura di tutti gli altri righi:



    ? WebSitePref
    "Prov�"
    ? len (WebSitePref)
    5


    Come si può notare, la lunghezza di WebSitePref è corretta (sempre 5 caratteri, cioè non ci sono caratteri "nascosti"), ma il carattere "speciale" � è sempre lo stesso per tutte le vocali accentate. Se fosse ogni volta diverso non avrei difficoltà a mettere un If Asc(Carattere) = X Then Carattere ="è" (o simile).

    Come posso risolvere la faccenda e ottenere le vocali accentate originali?
    Ultima modifica di GrandeTimoniere; 10-11-2014 a 16:04

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    (ometto l'intero codice perché inutile)
    ... ed invece mostralo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    ... ed invece mostralo ...
    ...oops! Immagino già che il mio problema risiede nell'apertura del file. Evito la pubblicazione dell'intera funzione (sono oltre 250 righe!) e riporto quelle che - a mio parere - sono quelle significative. In caso contrario, pubblicherò tutto.

    Dim NomeFile, Buf, WebSitePref, FilePref, Lab10_Temp, TempoCarica As String


    [...eccetera...]


    Dim FileReader As StreamReader = New StreamReader(NomeFile)

    [...eccetera...]


    Do
    WebSitePref = FileReader.ReadLine()
    If Len(WebSitePref) > 0 Then ' esclude righe vuote
    ListBox7.Items.Add(Microsoft.VisualBasic.LCase(Web SitePref)) : F = F + 1
    End If
    Loop Until WebSitePref Is Nothing


    .


    PS: non capisco perché, ma nella penultima riga di questo post WebSitePref compare "separato" (Web SitePref). Ovviamente nel codice è "intero".
    Ultima modifica di GrandeTimoniere; 10-11-2014 a 18:27

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il codice va inserito tra tag CODE ... per evitare quei problemi.

    Comunque, dipende da come hai creato quel file di testo ... e quindi dalla codifica usata. Forse risolvi con


    codice:
    Dim FileReader As StreamReader = New StreamReader(NomeFile, System.Text.Encoding.GetEncoding(850))
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    1) Il codice va inserito tra tag CODE ... per evitare quei problemi.

    2) Comunque, dipende da come hai creato quel file di testo ...
    [/code]
    1) Grazie, mi era proprio sfuggito.
    2) L'ho scritto con Notepad.

    Più o meno funziona, nel senso che - almeno adesso - i caratteri sono diversi tra loro (e quindi facilmente identificabili). Ma è possibile cambiare parametro e avere proprio quelli della tastiera italiana? Ecco come vengono identificati con la modifica suggerita:

    "ProvÓ"
    "ProvÞ"
    "ProvÚ"
    "Prový"
    "Prov‗"
    "Prov¨"
    "Prov░"

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Prova con il 437, oppure usa un editor che tratti gli Unicode e usalo (es. Notepad++)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Prova con il 437, oppure usa un editor che tratti gli Unicode e usalo (es. Notepad++)
    Non è 437 ma 1252 (che corrisponde ai caratteri latini).
    Inoltre, proprio grazie alla tua segnalazione, ho trovato questo link che potrebbe essere utile per chi vuole approfondire lo studio sui vari set di caratteri internazionali (giapponese e cinese compresi).

  8. #8
    Aargh! Non ci siamo ancora:

    Facendo vari test ho notato che i testi scritti con Notepad sono interpretati correttamente, ma le stringhe generate in altro modo(?) no. Per esempio, il nome del file di questa mail (che in Esplora Risorse lo leggo proprio così)...

    re_ martedì.eml
    ...è interpretato così:

    re_ marted�.eml
    ...che come si può notare al posto di ì (un solo carattere) ne ha tre:
    �
    Si tratta del nome del file di risposta a una mail che ho ricevuto da un mio amico francese che ha scritto con una tastiera francese. Forse riesco a trovare il codice corretto, ma rimane il problema: è possibile creare una procedura che riesca a capire con quale tastiera è stata scritta una stringa?
    Ultima modifica di GrandeTimoniere; 11-11-2014 a 06:40

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da GrandeTimoniere Visualizza il messaggio
    Aargh! Non ci siamo ancora:

    Facendo vari test ho notato che i testi scritti con Notepad sono interpretati correttamente, ma le stringhe generate in altro modo(?) no. Per esempio, il nome del file di questa mail (che in Esplora Risorse lo leggo proprio così)...



    ...è interpretato così:



    ...che come si può notare al posto di ì (un solo carattere) ne ha tre:

    Si tratta del nome del file di risposta a una mail che ho ricevuto da un mio amico francese che ha scritto con una tastiera francese. Forse riesco a trovare il codice corretto, ma rimane il problema: è possibile creare una procedura che riesca a capire con quale tastiera è stata scritta una stringa?

    Non è questione di "tastiera" ma di set di caratteri usati per l'encoding.

    Non esiste quindi una sola soluzione dato che i file possono essere codificati in vari modi. Questo sembra Unicode. In questo caso prova a non inserire affatto il secondo parametro (l'encoding).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Quote Originariamente inviata da oregon Visualizza il messaggio
    [...] Non esiste quindi una sola soluzione dato che i file possono essere codificati in vari modi. Questo sembra Unicode. In questo caso prova a non inserire affatto il secondo parametro (l'encoding).
    ...uhmm... non ho capito: intendi così?

    Dim FileReader As StreamReader = New StreamReader(NomeFile)
    Ma è proprio il codice (che non funziona) e che ho citato nel mio post n. 3.

    Pensavo che per "non inserire affatto il secondo parametro" intendessi l'eliminazione del valore numerico ...

    Dim FileReader As StreamReader = New StreamReader(NomeFile, System.Text.Encoding.GetEncoding())
    ...ma ovviamente ho capito male perché fornisce errore:

    Errore 2 Risoluzione dell'overload non riuscita perché nessun 'GetEncoding' accessibile accetta questo numero di argomenti.





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.