Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/41: Рейтинг темы: голосов - 41, средняя оценка - 4.61
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

Преобразовать кодировку utf-8 в cp1251 и обратно

03.10.2013, 10:41. Показов 8828. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здорова господа!!!

Пишу парсер веб страниц с русским текстом, но тут проблемка страницы записаны в двух кодировках utf8 и cp1251, получается неудобно, если у меня будет сайт в cp1251, и я допустим скопировал туда статью в кодировке utf8, то она не правильно отобразится - крякозябры появятся, раньше я когда писал парсер на пхп, то просто обходил те страницы которые в utf8, парсил токо те которые в cp1251, но щас хочу сделать универсальный парсер, там в принципе нужно только русские символы перевести в cp1251.

Мб есть готовые решения? Мне нужна функция которая б принимала строку в utf8 а на выходе давала строку в cp1251.
И функция нужна еще просто для определения в кокой кодировке текст????

Добавлено через 10 минут
Ладно функцию я нашол, нужна функция которая будет определять в какой кодировке текст, просто есть текст, но неизвестно в какой он кодировке, как определить кодировку???

Добавлено через 3 минуты
Есть строка текста, как определить в какой она кодировке?

Добавлено через 8 минут
Ладно буду парсить строку которая показывает браузеру в какой кодировке текст <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">, Если будет в utf8, то преобразую в сп1251, если в cп1251, то ничего не делать, а если в какой нить другой - то это мало вероятно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.10.2013, 10:41
Ответы с готовыми решениями:

Преобразовать utf-8 в cp1251 и обратно
Преобразовать надо без использования сторонних библиотек(windows.h тоже сторонняя библиотека). Читать текст надо из файла записывать тоже.

Не удалось преобразовать файл в кодировку UTF-8. Редактирование невозможно
Изначально проект создавался в OpenSuse 13.какой-то, Qt 4.8.5, Qt Creator 2.8. При открытии этого же проекта на Win7 с той же версией Qt...

XmlSerializer.Serialize() как поменять кодировку с UTF-16 на UTF-8
Задача серилизовать объект в string, но с кодировкой UTF-8. подзадача - как представить строку как Stream? // VALIDATE ...

5
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.10.2013, 11:10
ninja2, И зачем это делать руками? N либ же есть. К примеру iconv
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
03.10.2013, 11:28  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
И зачем это делать руками? N либ же есть. К примеру iconv
да в этой iconv ничего не поймешь.

Добавлено через 1 минуту
У меня iconv нету ее еще подключать нада скачивать.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.10.2013, 11:36
ninja2, Вах, какая проблема. Ведь лучше написать говнокод перевода из кодировки в кодировку самому и плевать что есть библиотеки которые сделаны специально для этого. Верной дорогой идете, товарищ Гуру.
2
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
03.10.2013, 11:38
Цитата Сообщение от ninja2 Посмотреть сообщение
У меня iconv нету ее еще подключать нада скачивать.
Поверь, это проще, чем делать всё самому.
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
04.10.2013, 09:40  [ТС]
Я сам не делал я готовую функцию нашол готовую построеную на винапи или хз я в нее не вникал:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
string Utf8_to_cp1251(const char *str)
{
    string res;
    int result_u, result_c;
 
    result_u = MultiByteToWideChar(CP_UTF8,
        0,
        str,
        -1,
        0,
        0);
 
    if (!result_u)
        return 0;
 
    wchar_t *ures = new wchar_t[result_u];
 
    if(!MultiByteToWideChar(CP_UTF8,
        0,
        str,
        -1,
        ures,
        result_u))
    {
        delete[] ures;
        return 0;
    }
 
    result_c = WideCharToMultiByte(
        1251,
        0,
        ures,
        -1,
        0,
        0,
        0, 0);
 
    if(!result_c)
    {
        delete [] ures;
        return 0;
    }
 
    char *cres = new char[result_c];
 
    if(!WideCharToMultiByte(
        1251,
        0,
        ures,
        -1,
        cres,
        result_c,
        0, 0))
    {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}
мне нужно было щас определять в какой кодировке сервер присылает текст, но и тут разрешилось, сервер присылает в загаловке в какой кодировке отображать текст например charset=UTF-8 или там может сп1251, а мб и в левой какой нить, те просто пропустим. Все сайты как правило стараются на utf-8 сделать но в рунете очень много, наверно процентов 90% всех сайтов сделано в сп1251. Просто выдирать эту строчку и смотреть в какой кодировке.

Добавлено через 1 минуту
Мне щас главное просто работающий прототип сделать, потом уже если что модернизирую с iconv.

Добавлено через 21 час 8 минут
Все таки подумал и решил iconv установить, но чо то не найду где ее скачать, и примеров использования нету.

Добавлено через 3 минуты
Вообще что бы не долго думать я вычитал что можно мою функцию доработать для остальных кодировок, там вроде говорится что переводим сначала в utf-16, потом в любую другую кодировку, так от ее можно доработать и переводить в любую кодировку.

Добавлено через 19 минут
От функция:
C++
1
2
3
4
5
6
7
8
result_c = WideCharToMultiByte(
        CP_KOI8,
        0,
        ures,
        -1,
        0,
        0,
        0, 0);
мне нужно в koi8-r перевести, с какой туда параметр передать? Я уже пробовал: koi8-r, koi8, KOI8 CP_KOI8 нифига не работает.

Добавлено через 15 минут
Ладно разобрался, там ничего изменять не нада оставить как и было 1251, а коi8r это 20866 кодировка.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2013, 09:40
Помогаю со студенческими работами здесь

Изменить кодировку из utf-8 без bom в просто utf-8
формируется xls фаил в коде прописано response.setContexType(&quot;application/vnd.ms-excel;charset=UTF-8&quot; в эксел документе отображается...

Русский CP1251 в UTF-8
Нужна фичя для замены русских букв в UTF-8 т.е. я пишу на русском получается адракадабра (символы как понимаю поступают Cp1251) надо что бы...

Настроить кодировку cp1251 в mariadb 10.1
Добрый день. Стоит задача подружить программу на delphi c базой данных mariadb 10.1.34 на сервере ubuntu 18.04.1. База поднимается с...

Кодировки cp1251 и UTf-8 отображение
Здравствуйте,уважаемые форумчане. Хотелось бы обратиться за помощью. Проблема такая. Есть сайт, кодировка задана в панели - cp1251....

Преобразование кодировки cp1251 в UTF-8
Здравствуйте форумчане. Есть большой файл excel, все буквы в крякозябрах. Проверил онлайн декодером показал, что надо сделать...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru