/
aprogrammer
/
dotnet-docs
Обзор
Документация
Войти
/
aprogrammer
/
dotnet-docs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
samples/snippets/visualbasic/VS_Snippets_CLR/conceptual.encoding/vb/stream1.vb
105 строк
4 KB
Next Turn
Format codes based on .editorconfig, Part 9 (#18905)
12 июн 2020, 18:35
Не верифицирован
12 июн 2020, 18:35
52365b4
Код
Авторство
О чём код?
' 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>