Модем Cinterion BGS2T RS232
Есть следующие проблемы. Буду благодарен, если ответите хотя бы на часть вопросов по их решению.

Вместо русских символов при чтении файлов через http или ftp выдает знаки вопроса (?).
Протокол https не открывается - пишет:

AT^SISO=0 +CME ERROR: missing input value
AT^SISR=0,1500 +CME ERROR: operation not allowed

Не воспринимает имя пользователя и пароль при использовании ftp или ftpput в соответствии с руководством по AT-командам модема и выдает ошибку:
AT^SISS=0,address,"ftp://user:password@ftp.sitename.ru/directory/filename.txt/;type=a" +CME ERROR: invalid input value
ftp-cайты, где не надо вводить имя пользователя и пароль, открываются.
Но через ftp не читает бинарные файлы и выдает пустые строчки. Не работают ни type=i, ни type=a.

Не воспринимает знак “_” (например, в имени каталога при ftp-соединении) и выдает ошибку:
^SIS: 0, 0, 105, "550 Failed to change directory.\0D\0A"
AT^SISR=0,200 +CME ERROR: operation failed

Примеры кода на C# с AT-командами:

http-соединение:

SerialPort port = OpenPort(port_name, baud_rate);
Thread.Sleep(1000);
port.WriteLine("AT+CGDCONT=1,\"IP\",\"internet.beeline.ru\"\r"); //Не уверен, что обязательно
Thread.Sleep(1000);
port.WriteLine("AT+CMEE=2\r"); //Расширенный режим сообщений об ошибках
Thread.Sleep(1000);
port.WriteLine("AT^SCFG=\"Tcp/WithURCs\",\"on\"\r");
Thread.Sleep(1000);
port.WriteLine("AT^SICS=0,\"inactTO\", \"0\"\r"); //Создается профиль соединения № 0 (Inactivity timeout)
Thread.Sleep(1000);
port.WriteLine("AT^SICS=0,\"conType\", \"GPRS0\"\r");
Thread.Sleep(1000);
port.WriteLine("AT^SICS=0,\"user\", \"beeline\"\r");
Thread.Sleep(1000);
port.WriteLine("AT^SICS=0,\"passwd\", \"beeline\"\r");
Thread.Sleep(1000);
port.WriteLine("AT^SISS=0,srvType,\"Http\"\r"); //Создается сервис-профиль
Thread.Sleep(1000);
port.WriteLine("AT^SISS=0,conId,0\r"); //Используется профиль соединения № 0
Thread.Sleep(1000);
port.WriteLine("AT^SISS=0,hcMethod,0\r"); //0=GET
Thread.Sleep(1000);
port.WriteLine("AT^SISS=0,address,http://www.site.ru/");
Thread.Sleep(1000);
port.WriteLine("AT^SISO=0\r"); //Открытие соединения
Thread.Sleep(1000);
for (int i = 0; i < 10; i++)
{
port.WriteLine("AT^SISR=0,1500\r");
Thread.Sleep(1000);
}
port.WriteLine("AT^SICI?\r"); //Информация о соединении
Thread.Sleep(1000);
port.WriteLine("AT^SISE=0\r"); //Информация об ошибках
Thread.Sleep(1000);
port.WriteLine("AT^SISC=0\r"); //Закрытие соединения
Thread.Sleep(1000);
String sms = port.ReadExisting(); //Читаем ответы на AT-команды с модема
Thread.Sleep(1000);
MessageBox.Show(sms);
Thread.Sleep(1000);
port.Close();

Для ftp-соединения создается следующий сервис профиль, остальное то же самое.

port.WriteLine("AT^SISS=0,srvType,\"ftp\"\r");
Thread.Sleep(1000);
port.WriteLine("AT^SISS=0,conId,0\r");
Thread.Sleep(1000);
//Читаем файл в режиме ASCII
port.WriteLine("AT^SISS=0,address,\"ftp://ftp.site.ru/directory/filename.txt;type=a\"\r");
Thread.Sleep(1000);