Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 10
RAD XE4+

Перевод строки из unicode в UTF-8

11.06.2018, 16:08. Показов 6433. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Уже пытался искать на форуме, видимо плохо искал.
Из строки "\u041f\u0415\u0420\u0412\u042b\u041 5 шаги" надо получить строку "ПЕРВЫЕ шаги". Как это сделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2018, 16:08
Ответы с готовыми решениями:

Преобразование Unicode (UTF-16) в UTF-8 и обратно
Здравствуйте. Признаюсь, снова нужна подмога профессионалов. :help: Перейду к проблеме: Есть файл my_list.dic в кодировке Unicode (а не...

Как Консольное-приложение в Lazarus сдружить c кодировкой Unicode или Unicode Big Endian или UTF-8
Нужно чтобы Lazarus отображал символы псевдографики желательно все, но в основном вот эти......

Перевод строки в utf-16 string
К своему большому стыду, дальше "hello world" в университете по c++ не продвинулся. А вот сейчас стала проблема отправки сообщений на...

15
504 / 247 / 75
Регистрация: 31.10.2010
Сообщений: 747
11.06.2018, 17:47
Maxim98, ищите в сети по запросу
c++ urldecode -- декодирование URL
c++ urlencode -- кодирование URL
найдёте много функций и классов обработки URL и парсинга вобще.
Далее используйте либо изучайте и пишите свой аналог.

Добавлено через 55 секунд
Maxim98, вот кстати ссылка с форума
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
11.06.2018, 18:55
Лучший ответ Сообщение было отмечено Maxim98 как решение

Решение

Средствами RAD 2010+ это раскодируется гораздо проще: \u0421\u043a\u0430\u0439\u0440\u0438\u043c - что это?
(с переводом Дельфи/Билдер, я надеюсь, проблем не будет?)
1
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 09:28
Средствами RAD 2010+ всё гораздо проще

Можно использовать любой из этих вариантов
C++
1
2
3
const char16_t *chUTF8 = u"\u041f\u0415\u0420\u0412\u042b\u0415 шаги";
const AnsiString sUTF8(u"\u041f\u0415\u0420\u0412\u042b\u0415 шаги");
const UnicodeString usUTF8(u"\u041f\u0415\u0420\u0412\u042b\u0415 шаги");
Миниатюры
Перевод строки из unicode в UTF-8  
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 09:47
Или просто вот так
C++
1
const UnicodeString sUnicode(L"\u041f\u0415\u0420\u0412\u042b\u0415 шаги");
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.06.2018, 09:53
Цитата Сообщение от Maluda Посмотреть сообщение
const AnsiString sUTF8(u"\u041f\u0415\u0420\u0412\u042b\u 0415 шаги");
С этим могут быть проблемы.

Кстати для utf-8 есть специальный тип UTF8String
1
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 09:56
Цитата Сообщение от Avazart Посмотреть сообщение
С этим могут быть проблемы
Поясни
0
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 10
12.06.2018, 10:30  [ТС]
Читал про эти макросы, а как их применить к тексту, если он уже в переменной?
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 10:37
Maxim98, да ничего не надо применять, в конструкторе AnsiString или UnicodeString уже само преобразуется

C++
1
const AnsiString sText("\u041f\u0415\u0420\u0412\u042b\u0415 шаги");
P.S. Это только, если речь идет о '\u' !!!
Миниатюры
Перевод строки из unicode в UTF-8  
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 10:41
Если же текст пришел в виде UTF8, тогда преобразовываем функцией UTF8ToString
Миниатюры
Перевод строки из unicode в UTF-8  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.06.2018, 10:50
Цитата Сообщение от Maluda Посмотреть сообщение
Поясни
Что тут пояснять? Ansi для анси символов, и локальной кодировки. Т.е. для русской винды это набор cp1251.
Добавь китайские иероглифы или арабскую вязь и скорее всего проявятся проблемы.
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 11:02
Цитата Сообщение от Avazart Посмотреть сообщение
Добавь иероглифы или арабскую вязь и скорее всего проявятся проблемы
Ну, и какие проблемы?
Миниатюры
Перевод строки из unicode в UTF-8  
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 11:44
Avazart, а вообще ты прав

Хочу немного исправить свои ответы выше, так как название темы UTF8 немного сбило c толку и изначально я понимал, что текст приходит в формате UTF8, для которого переменной может выступать.

Но, литерал '\u' - это преобразование к UTF16, поэтому следует использовать только UnicodeString.

То есть окончательный вариант:
C++
1
const UnicodeString sText(L"\u041f\u0415\u0420\u0412\u042b\u0415 шаги");
1
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 10
12.06.2018, 13:38  [ТС]
Извините, похоже неправильно объяснил задачу. С сервера приходит ответ, я записываю его в UnicodeString:
C++
1
2
3
UnicodeString resp = IdHTTP->Post(url, paramList);
ShowMessage(resp.Pos("\\u0"));              // 1
ShowMessage(resp);                          // \u041f\u0415\u0420\u0412\u042b\u0415 шаги
Переписал функцию c Дельфи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
AnsiString urlDecode(UnicodeString s){
    int i = 1, j = 1, c, len = s.Length();
    AnsiString result;
    result.SetLength(len);
    while(i <= len){
        if(s[i] == '\\'){
            if (s[i + 1] != 'u'){
                result[j] = s[i+1];
                i += 2;
            } else if((i + 5) <= len) {
                try{
                    c = StrToInt("$" + s.SubString(i + 2, 4));      // получаем код символа
                    result[j] = c;             // вот здесь надо что-то изменить
                } catch (...) {
                    //throw new Exception("Неверный код позиции " + AnsiString(i) + " " + s.SubString(i + 2, 4).UpperCase() + " ");       
                                        // показывает ошибку на символе 041F, потом перепишу
                }
                i += 6;
            } else throw new Exception("Неправильный конец строки");
        } else result[j] = s[i++];
    j++;
  }
 
  result.SetLength(j - 1);
  return result;
}
Она неправильно превращает строку. Как из строки "\\u0415" получить "П" ?
Изображения
 
0
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 10
12.06.2018, 13:47  [ТС]
Всем спасибо за ответы, в функции надо было просто написать
C++
1
result[j] = WideChar(c);
Вместо
C++
1
result[j] = c;
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
12.06.2018, 13:52
Maxim98, ты что-то совершенно запутал, то есть у тебя в строке приходит вот так?
C++
1
UnicodeString sRep = L"\\u041f\\u0415\\u0420\\u0412\\u042b\\u0415 шаги";
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2018, 13:52
Помогаю со студенческими работами здесь

Utf-8 to unicode
Не так давно появилась необходимость перейти с кодировки 1251 на utf-8 и теперь не могу использовать одну из функций своего кабинета....

Unicode и UTF-8
Всем Доброго! Объясните пожалуйста, что такое Unicode и UTF-8. Не нужно только давать ссылки на поисковые системы и на консорциум - не...

From UTF-8 to UNICODE
здравствуйте!! у меня вот какой вопрос! Как сделать преобразование UTF-8 и Unicode? во общем моя программа считывает данные с базы( база...

Unicode to UTF-8
Собственно вопрос в шапке. Преобразовать стоку \u0412\u0430\u043b\u0435\u043d\u0442\u0438\u043d в Валентин

Unicode и UTF-16 в Delphi
Мир всем и привет ! вот скачал исходник но там в мемо1 показывает : Serial Number: JA1100A1G9H3VP а когда открываю проект в...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru