Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| ' Visual Basic .NET Document | |
| Option Strict On | |
| ' <Snippet10> | |
| Imports System.IO | |
| Imports System.Text | |
| Module Example | |
| Public Sub Main() | |
| ' Use default replacement fallback for invalid encoding. | |
| Dim enc As New UnicodeEncoding(True, False, False) | |
| ' Define a string with various Unicode characters. | |
| Dim str1 As String = String.Format("AB YZ 19 {0}{1} {2}", | |
| ChrW(&hD800), ChrW(&hDC05), ChrW(&h00e4)) | |
| str1 += String.Format("Unicode characters. {0} {1} s {2}{3}", | |
| ChrW(&h00a9), ChrW(&h010C), ChrW(&h0062), ChrW(&h0308)) | |
| Console.WriteLine("Created original string...") | |
| Console.WriteLine() | |
| ' Convert string to byte array. | |
| Dim bytes() As Byte = enc.GetBytes(str1) | |
| Dim fs As FileStream = File.Create(".\characters.bin") | |
| Dim bw As New BinaryWriter(fs) | |
| bw.Write(bytes) | |
| bw.Close() | |
| ' Read bytes from file. | |
| Dim fsIn As FileStream = File.OpenRead(".\characters.bin") | |
| Dim br As New BinaryReader(fsIn) | |
| Const count As Integer = 10 ' Number of bytes to read at a time. | |
| Dim bytesRead(9) As Byte ' Buffer (byte array). | |
| Dim read As Integer ' Number of bytes actually read. | |
| Dim str2 As String = "" ' Decoded string. | |
| ' Try using Encoding object for all operations. | |
| Do | |
| read = br.Read(bytesRead, 0, count) | |
| str2 += enc.GetString(bytesRead, 0, read) | |
| Loop While read = count | |
| br.Close() | |
| Console.WriteLine("Decoded string using UnicodeEncoding.GetString()...") | |
| CompareForEquality(str1, str2) | |
| Console.WriteLine() | |
| ' Use Decoder for all operations. | |
| fsIn = File.OpenRead(".\characters.bin") | |
| br = New BinaryReader(fsIn) | |
| Dim decoder As Decoder = enc.GetDecoder() | |
| Dim chars(50) As Char | |
| Dim index As Integer = 0 ' Next character to write in array. | |
| Dim written As Integer = 0 ' Number of chars written to array. | |
| Do | |
| read = br.Read(bytesRead, 0, count) | |
| If index + decoder.GetCharCount(bytesRead, 0, read) - 1 >= chars.Length Then | |
| Array.Resize(chars, chars.Length + 50) | |
| End If | |
| written = decoder.GetChars(bytesRead, 0, read, chars, index) | |
| index += written | |
| Loop While read = count | |
| br.Close() | |
| ' Instantiate a string with the decoded characters. | |
| Dim str3 As New String(chars, 0, index) | |
| Console.WriteLine("Decoded string using UnicodeEncoding.Decoder.GetString()...") | |
| CompareForEquality(str1, str3) | |
| End Sub | |
| Private Sub CompareForEquality(original As String, decoded As String) | |
| Dim result As Boolean = original.Equals(decoded) | |
| Console.WriteLine("original = decoded: {0}", | |
| original.Equals(decoded, StringComparison.Ordinal)) | |
| If Not result Then | |
| Console.WriteLine("Code points in original string:") | |
| For Each ch In original | |
| Console.Write("{0} ", Convert.ToUInt16(ch).ToString("X4")) | |
| Next | |
| Console.WriteLine() | |
| Console.WriteLine("Code points in decoded string:") | |
| For Each ch In decoded | |
| Console.Write("{0} ", Convert.ToUInt16(ch).ToString("X4")) | |
| Next | |
| Console.WriteLine() | |
| End If | |
| End Sub | |
| End Module | |
| ' The example displays the following output: | |
| ' Created original string... | |
| ' | |
| ' Decoded string using UnicodeEncoding.GetString()... | |
| ' original = decoded: False | |
| ' Code points in original string: | |
| ' 0041 0042 0020 0059 005A 0020 0031 0039 0020 D800 DC05 0020 00E4 0055 006E 0069 0063 006F | |
| ' 0064 0065 0020 0063 0068 0061 0072 0061 0063 0074 0065 0072 0073 002E 0020 00A9 0020 010C | |
| ' 0020 0073 0020 0062 0308 | |
| ' Code points in decoded string: | |
| ' 0041 0042 0020 0059 005A 0020 0031 0039 0020 FFFD FFFD 0020 00E4 0055 006E 0069 0063 006F | |
| ' 0064 0065 0020 0063 0068 0061 0072 0061 0063 0074 0065 0072 0073 002E 0020 00A9 0020 010C | |
| ' 0020 0073 0020 0062 0308 | |
| ' | |
| ' Decoded string using UnicodeEncoding.Decoder.GetString()... | |
| ' original = decoded: True | |
| ' </Snippet10> |