string s = "*(&($UI@)&$O@";
char[] cs = s.ToCharArray();
byte[] bs = System.Text.Encoding.Default.GetBytes(cs);
byte[] в string
Дан массив byte[], содержащий коды символов в UTF. Подскажите как преобразовать его в строку.
а какой Utf? есть Utf-32, Utf-7 и Utf-8
кодировка Utf32
Не понял? Как это Utf-32. В этой кодировке каждый символ занимает 4 байта. В одном байте массива символ в Utf-32 хранится не может. Получается, что символ бьётся на 4 байта и в массив, так что ль?
Код:
Код:
string s2 = System.Text.Encoding.Unicode.GetString(bs);
возвращает совсем не то.
Код:
[FONT=Courier New][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] src = [/SIZE][SIZE=2][COLOR=#800000]"*(&($UI@)&$O@"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]; [COLOR=green]//исходная строка[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]byte[/COLOR][/SIZE][SIZE=2][] bs = System.Text.[/SIZE][SIZE=2][COLOR=#008080]Encoding[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Default.GetBytes(src.ToCharArray()); [COLOR=green]//кодируем в массив байтов[/COLOR][/FONT][/SIZE]
[SIZE=2][FONT=Courier New][COLOR=green]//Теперь восстанавливаем из массива bs строку обратно[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]Decoder[/COLOR][/SIZE][SIZE=2] d = [/SIZE][SIZE=2][COLOR=#008080]Encoding[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Default.GetDecoder(); [COLOR=green]//получаем декодер для текущей кодировки.[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] count = d.GetCharCount(bs, 0, bs.Length); [COLOR=green]//узнаём количество символов в кодировке UTF-16, находящихся в массиве[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2][] cs=[/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][count]; [COLOR=green]//создаём буффер[/COLOR][/FONT]
[FONT=Courier New]d.GetChars(bs, 0, bs.Length, cs, 0); [COLOR=green]//выполняем декодировку[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] dest = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New](cs); [COLOR=green]//создаём строку из декодированных символов[/COLOR][/FONT][/SIZE][FONT=Courier New][SIZE=2]
[/SIZE][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]byte[/COLOR][/SIZE][SIZE=2][] bs = System.Text.[/SIZE][SIZE=2][COLOR=#008080]Encoding[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Default.GetBytes(src.ToCharArray()); [COLOR=green]//кодируем в массив байтов[/COLOR][/FONT][/SIZE]
[SIZE=2][FONT=Courier New][COLOR=green]//Теперь восстанавливаем из массива bs строку обратно[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080]Decoder[/COLOR][/SIZE][SIZE=2] d = [/SIZE][SIZE=2][COLOR=#008080]Encoding[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Default.GetDecoder(); [COLOR=green]//получаем декодер для текущей кодировки.[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] count = d.GetCharCount(bs, 0, bs.Length); [COLOR=green]//узнаём количество символов в кодировке UTF-16, находящихся в массиве[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2][] cs=[/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][count]; [COLOR=green]//создаём буффер[/COLOR][/FONT]
[FONT=Courier New]d.GetChars(bs, 0, bs.Length, cs, 0); [COLOR=green]//выполняем декодировку[/COLOR][/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] dest = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New](cs); [COLOR=green]//создаём строку из декодированных символов[/COLOR][/FONT][/SIZE][FONT=Courier New][SIZE=2]
[/SIZE][/FONT]
[/SIZE]
как говориться, гранд мерси!
респект и уважуха! :)