Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308

    [C#] Encoding e rapporto char/byte

    Buona sera, ho un dubbio che mi assale. Ma una stringa per es. "ciao" che lunghezza in byte ha? Io sapevo che ogni carattere è 2 byte per cui dovrebbe essere 8 byte invece questo codice funziona presupponendo che ad ogni carattere della stringa corrisponda 1 solo byte:

    codice:
    FileStream x = File.Open(@"C:\prova", FileMode.OpenOrCreate);
    string s = "ciao&àààà";
    byte[] b = new byte[9];
    b = System.Text.Encoding.UTF8.GetBytes(s);
    x.Write(b, 0, b.Length);
    x.Close();
    FileStream y = File.Open(@"C:\prova", FileMode.OpenOrCreate);
    MessageBox.Show(y.Length.ToString());
    Sto diventando scemo....
    Per caso c'entra l'UTF8?

  2. #2
    UTF-8 è un encoding a lunghezza variabile, a seconda del particolare codepoint Unicode si va da 1 byte (per i caratteri comuni al subset ASCII) a 4 byte per carattere (per i caratteri più "strani", al di fuori della BMP).

    Nota tra l'altro che "ogni carattere è 2 byte" in ambito Unicode è comunque sbagliato - si fa finta che sia così sotto Windows perché il supporto per Unicode di Windows risale a quando 2 byte per codepoint bastavano, attualmente per rappresentare ogni codepoint in maniera univoca con caratteri di lunghezza fissa ci vogliono 4 byte per codepoint (UTF-32), e infatti le stringhe .NET (che internamente usano UTF-16) per alcuni caratteri devono usare una coppia di System.Char (i cosiddetti surrogate pairs).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Quando usavo VB5 non avevo bisogno di convertire le stringhe in byte per scrivere su un file random. Certi linguaggi ci hanno abituato troppo male
    Ora in C# c'è questo problema (usando la classe FileStream). Dunque, a quanto ho capito, per i caratteri "normali" della tastiera e per le lettere accentate posso stare tranquillo che ogni "char" di una stringa sia 1 byte. Ma in generale? Se si deve creare un progetto che lavora con qualsiasi tipo di carattere quale conversione encoding e quale regola universale del rapporto char/byte si dovrebbe usare? Ma forse è meglio affrontare i problemi quando arrivano.
    Grazie MItaly.

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.