Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Преобразование кодировок наверно

9.5K
05 февраля 2007 года
Borgir
97 / / 20.12.2006
День добрый, знатоки.
Возникла такая проблема. Занялся чтением СМС-ок, полученных GSM-модемом. Проблема в том что GSM-модем не очень понимает русские буквы в СМС-ках. Поэтому он возвращает мне текст русской СМС-ки в виде шестнадцатиричных кодов. Например русская маленькая буква "л" возвращается в виде строки "043B" (соответствие можно посмотреть в стандартной Windows-утилите "Набор символов"). А раз эта кодировка есть в этой утилите, значит это какая-то стандартная кодировка.

Вопрос такой, как такую кодировку перевести в нормальные символы?
Заранее спасибо!

P.S. поиском ничего полезного не нашел.
P.P.S. Задам вопрос более конкретно: как преобразовать из кодировки Юникод в кодировку ASCII
309
06 февраля 2007 года
el scorpio
1.1K / / 19.09.2006
 
Код:
WideString wstr;
// Получаем текст Unicode, пихаем в wstr
AnsiString astr = wstr; // Получаем соответствующий текст в ANSI
1
06 февраля 2007 года
kot_
7.3K / / 20.01.2000
Цитата: el scorpio
 
Код:
WideString wstr;
// Получаем текст Unicode, пихаем в wstr
AnsiString astr = wstr; // Получаем соответствующий текст в ANSI


точнее

 
Код:
WideString wstr;
// Получаем текст Unicode, пихаем в wstr
AnsiString astr = WideCharToString(wstr); // Получаем соответствующий текст в ANSI
9.5K
21 февраля 2007 года
Borgir
97 / / 20.12.2006
Извиняюсь что так долго молчал - были проблемы с инетом.
Вобщем попробовал я вышеописанный вариант - не работает, но направление подсказано правильное. Но сколько я ни бился - ничего не получилось.
Задача сводится к следующему: есть строка типа AnsiString, содержащая некий текст в кодировке Unicode. Выглядит она например так: "043404430448", что в переводе на русский означает слово из трех букв "душ".
Как мне сделать сию перекодировку?

P.S. Только не надо предлагать вариант делить строку на части по 4 символа в каждой, составить в программе таблицу соответствия и соответственно выбирать что чему соответствует. Этот вариант я оставил на крайний случай :)
1
21 февраля 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Borgir
Извиняюсь что так долго молчал - были проблемы с инетом.
Вобщем попробовал я вышеописанный вариант - не работает, но направление подсказано правильное. Но сколько я ни бился - ничего не получилось.
Задача сводится к следующему: есть строка типа AnsiString, содержащая некий текст в кодировке Unicode. Выглядит она например так: "043404430448", что в переводе на русский означает слово из трех букв "душ".
Как мне сделать сию перекодировку?

P.S. Только не надо предлагать вариант делить строку на части по 4 символа в каждой, составить в программе таблицу соответствия и соответственно выбирать что чему соответствует. Этот вариант я оставил на крайний случай :)


Варианта два - или таблица соответствия или использование WideString
. Як то казали давні латиняни - tercium non datum (прошу прощения за возможные ошибки - латынь учил лет 12 назад). :)

9.5K
21 февраля 2007 года
Borgir
97 / / 20.12.2006
Ну я согласен на использование WideString. Подскажите только как мне из AnsiString запихнуть данные в WideString? Потому что насколько я понял функция StringToWideChar осуществляет кодировку строки в Юникод, а мне по-сути надо запихнуть строку в WideString без кодировки, а уже потом эту WideString раскодировать с помощью WideCharToString.
309
22 февраля 2007 года
el scorpio
1.1K / / 19.09.2006
[quote=Borgir]Подскажите только как мне из AnsiString запихнуть данные в WideString?[/quote]
Очень легко - использованием оператора присваивания :D
Дело в том, что у обоих типов есть конструкторы __fastcall WideString (const AnsiString& src) и __fastcall AnsiString (const WideString &src).
По-этому когда выполняется присваивание, то автоматически вызывается конструктор с соответствующим параметром:
 
Код:
// Мы пишем код
aStr = wStr; // AnsiString = WideString
// А компилятор разворачивает его в последовательность команд
aStr.operator= (AnsiString::AnsiString (/*const WideString&*/wStr));

Посему нет нужды заморачиваться какими либо функциями преобразования. Особо WideCharToString и прочими "указательными" анахронизмами.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог