Buongiorno Oregon
Ho esaminato il link che mi hai dato e ho fatto delle prove inserendolo in un form. Ecco il listato della routine
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Dim strings() As String = {"This is the first sentence. ",
' "This is the second sentence. "}
Dim strings(2) As String
Dim utf16Encoding As Encoding = Encoding.Unicode
ListBox1.Items.Clear()
' Create array of adequate size.
Dim bytes(50) As Byte
' Create index for current position of array.
Dim index As Integer = 0
strings(0) = TextBox1.Text
ListBox1.Items.Add("Strings to encode:")
For Each stringValue In strings
If stringValue Is Nothing Then Continue For
ListBox1.Items.Add(" " & stringValue)
Dim count As Integer = utf16Encoding.GetByteCount(stringValue)
If count + index >= bytes.Length Then
Array.Resize(bytes, bytes.Length + 50)
End If
Dim written As Integer = utf16Encoding.GetBytes(stringValue, 0, stringValue.Length, bytes, index)
index += written
Next
'Console.WriteLine()
ListBox1.Items.Add("Encoded bytes:")
Dim vshow As String = ShowByteValues(bytes, index)
ListBox1.Items.Add(" " & vshow)
'Console.WriteLine()
' Decode Unicode byte array to a string.
Dim asciiEncoding As Encoding = Encoding.UTF8
Dim newString As String = asciiEncoding.GetString(bytes, 0, index)
Dim NormString As String = NormalizzaString(bytes, index)
Label1.Text = NormString
'Console.WriteLine("Decoded: {0}", newString)
End Sub
Private Function ShowByteValues(bytes As Byte(), last As Integer) As String
Dim returnString As String = " "
For ctr As Integer = 0 To last - 1
If ctr Mod 20 = 0 Then returnString += vbCrLf + " "
returnString += String.Format("{0:X2} ", bytes(ctr))
Next
Return returnString
End Function
Private Function NormalizzaString(bytes As Byte(), last As Integer) As String
Dim NormString As String = "", num As Integer
For ctr As Integer = 0 To last - 1 Step 2
num = bytes(ctr)
'If ctr Mod 20 = 0 Then returnString += vbCrLf + " "
NormString += Chr(num)
Next
Return NormString
End Function
La stringa di partenza è in UTF-16 e ho cambiato la riga iniziale
Dim utf16Encoding As Encoding = Encoding.Unicode
la riga è ABCDEFGH
la decodifica deve avvenire in UTF-8
Dim asciiEncoding As Encoding = Encoding.UTF8
l'istruzione: Dim newString As String = asciiEncoding.GetString(bytes, 0, index)
fornisce una stringa con le lettere da me digitate accompagnate da un vbnull ciascuna
Come Mai?
Ho creato una funzione di prova che mi toglie il vbnull ma è un accrocco temporaneo
Private Function NormalizzaString(bytes As Byte(), last As Integer) As String
Dim NormString As String = "", num As Integer
For ctr As Integer = 0 To last - 1 Step 2
num = bytes(ctr)
NormString += Chr(num)
Next
Return NormString
End Function
grazie per l'attenzione
Franco