Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444

System.FormatException FromBase64String

08.10.2017, 12:15. Показов 5547. Ответов 12

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
public string this[string name]
        {
            set
            {
                _data.Add(name, _encryptor.Encrypt(FromBase64String(value)));//Err
            }
        }
Отладка показывает следующее :

В чем проблема ?
+ Резаная трасировка стека
Необработанное исключение: System.FormatException: Недопустимая длина строки или массива знаков Base-64.
в System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength)
в System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
в System.Convert.FromBase64String(String s)
в TCPChat.ProtectedData.set_Item(String name, String value) в C:\Users\RAE.Denis-PC\Documents\SharpDevelop Projects\WEB\TCPChat\Client.cs:строка 18
в TCPChat.Program.Main(String[] args) в C:\Users\RAE.Denis-PC\Documents\SharpDevelop Projects\WEB\TCPChat\Program.cs:строка 13
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.10.2017, 12:15
Ответы с готовыми решениями:

Ошибка: System.FormatException: "Input string was not in a correct format."
Помогите когда в компиляторе ввожу 3 после: if (page == 1) { Console.WriteLine(); ...

FormatException
Подскажите, пожалуйста, в чем ошибка 42 строка, FormatException. using System; using System.IO; using System.Net; using...

Диагностика FormatException
Если программу запускаю вручную, то все норм :) Если через Process.Start() в своей программе, то такая фигня: :D Сигнатура п р о б л...

12
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
08.10.2017, 12:32  [ТС]
Строка должна быть кратна 8 , серьезно????
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
08.10.2017, 13:42
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Строка должна быть кратна 8 , серьезно????
Еще как. Ты точно понимаешь что такое base64 кодировка и для чего она используется?
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
08.10.2017, 20:12  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Еще как. Ты точно понимаешь что такое base64 кодировка и для чего она используется?

Не по теме:

Ну использовать ёршик для для обрызгивания святой водой , конечно , идея неплохая , но моя не совсем такая.
Цель преобразовать строку в байты и зашифровать их (уже байты) )


Проблему решил используя функции System.Text.Encoding.Default , конкретно GetString и GetBytes.

Добавлено через 2 минуты
Хотя , конечно , разные локальные настройки и все перестанет работать...

Добавлено через 1 минуту
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Еще как.
А почему?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
08.10.2017, 20:13
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Хотя , конечно , разные локальные настройки и все перестанет работать...
Именно. Лучше использовать конкретную кодировку - Encoding.UTF8 или Encoding.GetEncoding(1251)
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
08.10.2017, 22:02  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Лучше использовать конкретную кодировку - Encoding.UTF8
Ну вот разве я дурак? Риторический вопрос. Я пробовал , но смущает меня вот что: байты "больше" 127 при конвертации в строку и выводе отображаются как "?" , причем я проверил и обнаружил что код этих вопросов один и тот же , те все байты > 127 теряются.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
08.10.2017, 22:18
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
смущает меня вот что: байты "больше" 127 при конвертации в строку и выводе отображаются как "?" , причем я проверил и обнаружил что код этих вопросов один и тот же , те все байты > 127 теряются.
Значит в коде есть ошибка.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
11.10.2017, 19:21  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Значит в коде есть ошибка.
Это тестовый пример... Ну берем цикл от 0-255 (int i) , и
C#
1
Write(GetString(new byte[]{(byte)i}));
Символы с кодом больше 127 - "??????"
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
11.10.2017, 19:35
RaevskiAnatoly, приведи полный пример
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
11.10.2017, 20:14  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using static System.Console;
using static System.Text.Encoding;
namespace TCPChat
{
    internal class Program
    {
        public static void Main(string[] args)
        {
           for(int i = 0 ; i < 255; i++) 
               Write(UTF8.GetString(new byte[]{(byte)i}));
      
            ReadKey(true);
        }
        }
    }
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
11.10.2017, 21:23
RaevskiAnatoly, в рамках UTF8 байты 0x80-0xFF не описывают символы. Это неверные байты. В таком случае класс Encoding использует символ � (U+FFFD). Чтобы избежать такой молчаливой замены нужно создать экземпляр UTF8Encoding с throwOnInvalidBytes:true
C#
1
2
3
var utf8 = new UTF8Encoding(encoderShouldEmitUTF8Identifier:false, throwOnInvalidBytes:true);
for(int i = 0 ; i < 255; i++) 
    Write(utf8.GetString(new byte[]{(byte)i}));
Добавлено через 28 минут
То есть в целом твоя ошибка в неверной работе с кодировками. Нельзя взять произвольные байты и считать что они обязаны соответствовать каким-то символам. Если перенести это на сетевой чат который пересылает текст в многобайтовой кодировке, то нельзя полученный массив байтов преобразовывать в строку с помощью Encoding.GetString(). Нужно использовать декодер который умеет сохранять байты которые пока не удалось декодировать. Cмотри пример в теме Кодировка
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
14.10.2017, 10:49  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
То есть в целом твоя ошибка в неверной работе с кодировками. Нельзя взять произвольные байты и считать что они обязаны соответствовать каким-то символам. Если перенести это на сетевой чат который пересылает текст в многобайтовой кодировке, то нельзя полученный массив байтов преобразовывать в строку с помощью Encoding.GetString().
Стоп. В принципе , если я превращаю строку в байты через GetBytes , затем шифрую и расшифровываю , то получаю те же байты , и GetString должен работать идеально без накладок. Это я просто нашел проблему там где ее нет)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
14.10.2017, 12:51
RaevskiAnatoly, да, при условии использовании одинаковой кодировки на обоих сторонах
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2017, 12:51
Помогаю со студенческими работами здесь

Linq to XML: при компиляции выдает ошибку FormatException
ситуация - программа считывает данные из xml -файла , созданного на основе SQL запроса. это фрагмент xml файла &lt;customer...

Необработанное исключение типа "System.Net.Sockets.SocketException" в System.dll
Доброго времени суток! Есть следующая статья: Разработка прокси-сервера на C# В самом конце есть исходник с несколькими разными прокси...

Ошибка: "Не удалось привести тип объекта "System.ConsoleKeyInfo" к типу "System.IConvertible"."
При запуске пишет, что &quot;Не удалось привести тип объекта &quot;System.ConsoleKeyInfo&quot; к типу &quot;System.IConvertible&quot;.&quot; static void...

Ошибка An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll
добовляю данные в таблицу .mdb (язык C#) string strSql='INSERT INTO tt (ID,F1,F2) VALUES(?,?,?)'; OleDbConnection cn = new...

System.FormatException в программе связанной с базой Access
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll выдает такую ошибку и выделяет строки var da = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru