Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lohness
129 / 101 / 5
Регистрация: 24.04.2008
Сообщений: 930
#1

поиск в win1251 строке работает, а в UTF-8 - нет - C++

02.12.2013, 11:46. Просмотров 292. Ответов 5
Метки нет (Все метки)

Есть код:

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
63
64
.......
URLDownloadToFile(0, urlfile1.c_str(), L"SAVENAME1",0,0); 
filenam = "SAVENAME1";
 
..................
..................
 
ifstream fin(filenam);
if (!fin) cout << "Ошибка исходного файла!" << endl;
else
{
string str;
int number = 1;
while (getline(fin, str))
{
 
string::size_type n = str.find("jpg");
 
if (n != string::npos)
{
 
str.erase(str.begin(), str.begin() + str.find("img-fotki.yandex"));
auto it = str.find("XXXL");
if(it != string::npos)
{
str.replace(str.find("XXXL"), 4, "orig");
it = str.find('\"');
} 
auto it1 = str.find("XXL");
if(it1 != string::npos)
{
str.replace(str.find("XXL"), 3, "orig");
it1 = str.find('\"');
} 
 
auto it2 = str.find("XL");
if(it2 != string::npos)
{
str.replace(str.find("XL"), 2, "orig");
it2 = str.find('\"');
} 
 
auto it3 = str.find("L");
if(it3 != string::npos)
{
str.replace(str.find("L"), 1, "orig");
it3 = str.find('\"');
} 
гЂЂ
auto it4 = str.find("S");
if(it4 != string::npos)
{
str.replace(str.find("S"), 1, "orig");
it4 = str.find('\"');
} 
auto it5 = str.find("M");
if(it5 != string::npos)
{
str.replace(str.find("M"), 1, "orig");
it5 = str.find('\"');
}
str.erase(str.begin() + str.find('\"'), str.end());
 
........

Так вот если предварительно сохранить страницу в кодировке 1251 в файл SAVENAME1, то эта часть кода отрабатывает правильно оставляя от страницы только ссылки на картинки.
Если же дать программе самой скачать страничку (URLDownloadToFile), то она скачивается в кодировке UTF-8
и код вынимает из файла только две первые ссылки на картинки.

Визуально разница в том что в кодировке 1251 строчки которые нужно обрабатывать имеют вид:

HTML5
1
rel="nofollow"><IMG width="800" height="434" title="" alt="" src= " http://img-fotki.yandex.ru/get/9319/224143968.8/0_cfff7_ab09216d_XL.jpg "
а в UTF она гораздо длиннее и в одной строке файла включены несколько нужных ссылок
в итоге берется только одна ссылка, а после нее обработка строки заканчивается.

Архивы с кодом обрабатываемой страницы:
[cut]


Правильно ли я понимаю что надо предварительно разбить файл с UTF кодом
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 11:46     поиск в win1251 строке работает, а в UTF-8 - нет
Посмотрите здесь:

Не работает поиск подстроки в строке - C++
Не работает поиск подстроки в строке в ф-ии void ChangingStudent(). Заранее спасибо #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include...

Поиск слова в строке некорректно работает на повторяющихся рядом стоящих буквах - C++
вроде все работает, но когда введено два одинаковых символа допустим bb и в слове которое нужно найти вводим bb то считает все символы bb....

Позиция символа в UTF-8 строке - C++
#include &lt;iostream&gt; using namespace std; void main() { // файл в UTF-8 без БОМ system(&quot;chcp 65001&quot;); char* s =...

Перекодировка из EBCDIC в win1251 - C++
Помогите пожалуйста составить прогу перекодировки файла из EBCDIC в win1251

Сумму элементов в той строке, в которой нет отрицательных чисел - C++
Сумму елементов в том ряде в котором нету негативних чисел Добавлено через 11 секунд #include&lt;iostream&gt; #include&lt;fstream&gt; ...

Поиск файла в каталоге если нет , то создать - C++
Добрый день , облазил кучу сайтов , но не нашел ответ на вопрос ... Как создать файл если он отсутствует ? И как указать каталог для...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 12:56     поиск в win1251 строке работает, а в UTF-8 - нет #2
Если всё в одной строке, то через поиск всех rel= в строке. Запоминайте позицию за jpg. С неё поиск следующего rel=.
lohness
129 / 101 / 5
Регистрация: 24.04.2008
Сообщений: 930
02.12.2013, 13:10  [ТС]     поиск в win1251 строке работает, а в UTF-8 - нет #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Если всё в одной строке, то через поиск всех rel= в строке. Запоминайте позицию за jpg. С неё поиск следующего rel=.
а если не известно в одной строке или нет?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.12.2013, 13:27     поиск в win1251 строке работает, а в UTF-8 - нет #4
Тогда весь текст считать в одну строку и там искать.
chedman
81 / 80 / 2
Регистрация: 30.10.2013
Сообщений: 250
02.12.2013, 13:29     поиск в win1251 строке работает, а в UTF-8 - нет #5
Может копнуть в сторону wsting и сразу в проге предусмотреть, что в одной строке может быть несколько ссылок на рисунки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 16:24     поиск в win1251 строке работает, а в UTF-8 - нет
Еще ссылки по теме:

поиск в строке - C++
Здравствуйте, ищу в строке определенное слово (с помощью find), с этим разобрался, а вот теперь нужно считать слово или символ, в общем что...

Поиск в строке - C++
Подскажите, пожалуйста, функцию, которая выделяла из строки новую подстроку, состоящую из символов, не входящий в список, при этом поиск...

По отдельности работает, полностью нет - C++
Здравствуйте. Делаю домашнее задание, с утра нужно сдать. Все работает по отдельности, как собираю полностью ошибка. Подскажите, в чем...

Рекурсия - работает, нет результата - C++
Всем привет. У меня есть программа которая предназначена для Задан массив целых. Построить из них любую последовательность таким образом,...


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

Или воспользуйтесь поиском по форуму:
lohness
129 / 101 / 5
Регистрация: 24.04.2008
Сообщений: 930
02.12.2013, 16:24  [ТС]     поиск в win1251 строке работает, а в UTF-8 - нет #6
решил так
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
        string::size_type n = str.find("img-fotki.yandex");
                
                while (n != string::npos)
                {
                str.erase(str.begin(), str.begin() + str.find("img-fotki.yandex"));
                string s1 =  str.substr(0, str.find('\"'));
                auto it = s1.find("XXXL");
                if(it != string::npos)
                {
                s1.replace(s1.find("XXXL"), 4, "orig");
                it = s1.find('\"');
                }       
                auto it1 = s1.find("XXL");
                if(it1 != string::npos)
                {
                s1.replace(s1.find("XXL"), 3, "orig");
                it1 = s1.find('\"');
                }       
                
                auto it2 = s1.find("XL");
                if(it2 != string::npos)
                {
                s1.replace(s1.find("XL"), 2, "orig");
                it2 = s1.find('\"');
                }       
                
                auto it3 = s1.find("L");
                if(it3 != string::npos)
                {
                s1.replace(s1.find("L"), 1, "orig");
                it3 = s1.find('\"');
                }       
                auto it4 = s1.find("S");
                if(it4 != string::npos)
                {
                s1.replace(s1.find("S"), 1, "orig");
                it4 = s1.find('\"');
                }       
                auto it5 = s1.find("M");
                if(it5 != string::npos)
                {
                s1.replace(s1.find("M"), 1, "orig");
                it5 = s1.find('\"');
                }
                fout << "<P><IMG SRC=http://" << s1 << ">" << endl;
                str.erase(str.begin(), str.begin() + str.find("\""));
                std::wstring wstr(s1.begin(), s1.end());
вроде работает правильно
Yandex
Объявления
02.12.2013, 16:24     поиск в win1251 строке работает, а в UTF-8 - нет
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru