Восстановление из base64
От: Laserson  
Дата: 29.09.08 09:34
Оценка:
Здравствуйте.

Возникла проблема с base64 и кодировками. Тема Base64 часто обсуждалась, но меня интересует следующее:

имеется исходная строка base64, в ней закодирован текст. После раскодировки через System.Encoding.Default.GetString() получается "получитаемая' строка т.е. часть текста корректно восстановилась, а часть заполнена "квадратиками". После этого я в цикле проверяю значения каждого эл-та массива. Часть значений, которые <256, получаются читаемыми, остальная часть (>256, например, 438) получается квадратиками. Пробовал передавать последние символы с кодом >256 через System.Encoding.Unicode.GetString(), но возвращается пустая строка. Как я понял Unicode-символы должны быть в виде \u4410, но у меня есть просто числа...

Как все это можно раскодировать.
Re: Восстановление из base64
От: Pavel M. Россия  
Дата: 29.09.08 09:36
Оценка:
Здравствуйте, Laserson, Вы писали:

L>Здравствуйте.




L>имеется исходная строка base64, в ней закодирован текст.


А откуда взялась эта строка?
--------------------------
less think — do more
Re[2]: Восстановление из base64
От: Laserson  
Дата: 29.09.08 09:43
Оценка:
Здравствуйте, Pavel M., Вы писали:

PM>Здравствуйте, Laserson, Вы писали:


L>>Здравствуйте.




L>>имеется исходная строка base64, в ней закодирован текст.


PM>А откуда взялась эта строка?


Строка получается от библиотеки, которая перехватывает все нажатия клавиш в указанном окне. Строка в формате UTF-16LE
Re: Восстановление из base64
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.09.08 10:21
Оценка:
Здравствуйте, Laserson, Вы писали:
L>имеется исходная строка base64, в ней закодирован текст. После раскодировки через System.Encoding.Default.GetString() получается "получитаемая' строка т.е. часть текста корректно восстановилась, а часть заполнена "квадратиками". После этого я в цикле проверяю значения каждого эл-та массива.
Какого именно массива?
L> Часть значений, которые <256, получаются читаемыми, остальная часть (>256, например, 438) получается квадратиками.
Что значит "получается квадратиками"? Каким образом смотрим на эти квадратики?
L>Пробовал передавать последние символы с кодом >256 через System.Encoding.Unicode.GetString(), но возвращается пустая строка.
Куда передавать?
L>Как я понял Unicode-символы должны быть в виде \u4410, но у меня есть просто числа...
Нет. Unicode символы, как и прочие, должны быть в виде символов.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Восстановление из base64
От: Laserson  
Дата: 29.09.08 10:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Laserson, Вы писали:

L>>имеется исходная строка base64, в ней закодирован текст. После раскодировки через System.Encoding.Default.GetString() получается "получитаемая' строка т.е. часть текста корректно восстановилась, а часть заполнена "квадратиками". После этого я в цикле проверяю значения каждого эл-та массива.
S>Какого именно массива?
L>> Часть значений, которые <256, получаются читаемыми, остальная часть (>256, например, 438) получается квадратиками.
S>Что значит "получается квадратиками"? Каким образом смотрим на эти квадратики?
L>>Пробовал передавать последние символы с кодом >256 через System.Encoding.Unicode.GetString(), но возвращается пустая строка.
S>Куда передавать?
L>>Как я понял Unicode-символы должны быть в виде \u4410, но у меня есть просто числа...
S>Нет. Unicode символы, как и прочие, должны быть в виде символов.

a. Массив получается после Convert.FromBase64String(string)
b. Квадратики типа 
с. Передавать методу System.Encode.Unicode.GetString(byte[]) как параметр
Re[3]: Восстановление из base64
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.09.08 10:55
Оценка:
Здравствуйте, Laserson, Вы писали:


L>a. Массив получается после Convert.FromBase64String(string)

То есть речь идет о byte[], так? Тогда что именно оказывается "> 256"?
L>b. Квадратики типа 
Где они видны, юный падаван? В отладчике? Или ты выводишь их на экран в ShowMessage?
L>с. Передавать методу System.Encode.Unicode.GetString(byte[]) как параметр
Слишком много опечаток. Что именно передается и куда? фрагмент проблемного кода (а не его пересказ) в студию.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Восстановление из base64
От: Pavel M. Россия  
Дата: 29.09.08 11:09
Оценка:
Здравствуйте, Laserson, Вы писали:

L>Строка получается от библиотеки, которая перехватывает все нажатия клавиш в указанном окне. Строка в формате UTF-16LE


Есть подозрение, что либо строка в другом формате, либо неправильно закодирована. "Получитабельность" как раз и намекает на юникод... хм...Попробуйте перебрать все стандартные кодировки из Encoding, то есть Utf7, Utf8, Utf32.
--------------------------
less think — do more
Re[3]: Восстановление из base64
От: Qbit86 Кипр
Дата: 29.09.08 13:29
Оценка: +2
Здравствуйте, Laserson, Вы писали:

L>b. Квадратики типа  :)


«Квадратики» — это свойство не символов, а программы-смотрелки. Появиться «квадратики» могут из-за того, что реализация шрифта, назначенного для отображения, не содержит графические изображения для всех символов, определяемых кодировкой. Либо-же программа-смотрелка интерпретирует строку не в той кодировке, в которой она закодирована. Но в этом случае чаще имеем не «квадратики», а «кракозябры» или «вопросики».

Пример: ∰. В моём браузере (Хром) шрифты по умолчанию содержат графическое изображение этого символа. А в ИЕ (при выборе тех же самых семейств шрифтов) интеграла скорее всего видно не будет — «квадратик».

На всякий случай советую почитать про Необходимый Минимум знаний о кодировках.
Глаза у меня добрые, но рубашка — смирительная!
Re[4]: Восстановление из base64
От: Laserson  
Дата: 30.09.08 06:58
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, Laserson, Вы писали:


L>>b. Квадратики типа 


Q>«Квадратики» — это свойство не символов, а программы-смотрелки. Появиться «квадратики» могут из-за того, что реализация шрифта, назначенного для отображения, не содержит графические изображения для всех символов, определяемых кодировкой. Либо-же программа-смотрелка интерпретирует строку не в той кодировке, в которой она закодирована. Но в этом случае чаще имеем не «квадратики», а «кракозябры» или «вопросики».


Q>Пример: ∰. В моём браузере (Хром) шрифты по умолчанию содержат графическое изображение этого символа. А в ИЕ (при выборе тех же самых семейств шрифтов) интеграла скорее всего видно не будет — «квадратик».


Q>На всякий случай советую почитать про Необходимый Минимум знаний о кодировках.


Проблема в том, что я не могу от него избавиться (квадратика). Я вывожу такой текст через RichTextBox, но когда я пробовал удалять последний символ текста (где появлялся квадратик) через myText.Remove(myText.Length — 1, 1), то у меня просто обрезалась последняя видимая буква нормального текста, но этот квадрат оставался. Когда я посмотрел RTF код RichTextBox, то на месте квадратика стоит код \cf1 '08. Про cf1 я понял, а '08 это что такое?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.