Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    VB NET Codifica UTF-8

    Ciao ragazzi!

    Enigma insolubile? Per creare un file di testo con codifica UTF-8 basta seguire uno degli innumerevoli esempi, tanto più che UTF-8 è la codifica di default. Io per esempio uso questo facsimile di codice:

    Imports System
    Imports System.IO
    Imports System.Text

    ..........


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim path As String = "C:\MyTest.txt"
    If File.Exists(path) = False Then
    Dim sw As StreamWriter = File.CreateText(path)
    'sw.WriteLine("buongiorno = สวัสดี") 'voglio un file vuoto
    sw.Close()
    End If
    End Sub


    Ho notato però che, se non scrivo una riga con caratteri unicode il file vuoto creato ha codifica UTF-8 solo apparente, nel senso che aprendolo col Blocco Note e scrivendoci qualche carattere "strano", al momento di salvare mi chiede di cambiare la codifica Ansi, pena la perdita dei dati.

    Perchè succede questo?
    Ciao e grazie anticipate per la risposta
    Sergio

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Re: VB NET Codifica UTF-8

    Originariamente inviato da sergiobarbi
    Ho notato però che, se non scrivo una riga con caratteri unicode il file vuoto creato ha codifica UTF-8 solo apparente, nel senso che aprendolo col Blocco Note e scrivendoci qualche carattere "strano", al momento di salvare mi chiede di cambiare la codifica Ansi, pena la perdita dei dati.
    Non ha molto senso parlare di codifica di un file vuoto: quando un file è vuoto, puoi scegliere la codifica che vuoi dato che non contiene dati.

    Comunque sia, spiegati meglio perché la questione sembra un po' confusa...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    Re: Re: VB NET Codifica UTF-8

    Originariamente inviato da alka
    Non ha molto senso parlare di codifica di un file vuoto: quando un file è vuoto, puoi scegliere la codifica che vuoi dato che non contiene dati.
    Esatto... Il notepad rileva l'encoding del file "indovinando" in base al contenuto del file (usa la IsTextUnicode per questo, che tra l'altro non è così infallibile), ma se il file è completamente vuoto di default suppone che si tratti di encoding ANSI nel codepage corrente.
    Teoricamente il framework potrebbe aggiungere un BOM per marcare il file come UTF-8 (sarebbe quindi uno 0xEFBBBF all'inizio del file), ma:
    - se non ci scrivi niente (ovvero, ti limiti ad aprire il file) non ha senso che lo faccia in automatico, dato che potresti volere usare lo stream come stream binario o con un altro encoding;
    - in ogni caso, il BOM per file UTF-8 non è raccomandato per i motivi spiegati nella pagina linkata, per cui è giusto che non lo metta lo stesso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Grazie!

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.