Титла: Изгубени в encoding-а Публикувано от: villimon в Dec 01, 2014, 16:59 Здравейте,
ще съм ви благодарен ако ми дадете някаква насока защото каквото пробвам стигам до задънена улица. Първо: Опитвам се да извлека HTML страница. Второ: Записвам я във файл текстов с разширение .html Трето: Отварям файла и го парсвам. По време на третата стъпка текста, който парсвам ми излиза в формат РѕСЃРёРіСѓС да спомена че страниците са на кирилица. Стигнах до няколко наблюдения когато файла е UTF-8 ми се получава така. Когато е ANSI нещата изглеждат нормални. Възможно ли е когато тегля html страницата тя да се тегли с encoding на файла който се създава. Защото пробвам основно с два сайта и ми излизат двата различни резултата. Вече всякакви налудничави теории приемам. Но ако някои може да ми обясни как стоят нещата ще съм много благодарен. може да има такава тема и ще съм благодарен ако ме насочите към нея. Титла: Re: Изгубени в encoding-а Публикувано от: korea60 в Dec 01, 2014, 17:30 Нямам идея с какав език правиш цялата процедура? Ако отваряш текста в команд пром енкодинга е cp866, линукски терминал, не би трябвало да има проблем с cp1251 и utf-8.
Общо взето трябва да кажеш как точно парсваш текста, т.е. с какав език, за да ти кажа евентуално как се ползва енкодинг и декодинг. Титла: Re: Изгубени в encoding-а Публикувано от: villimon в Dec 01, 2014, 17:33 Да това щеше да е хубаво да го кажа в началото
всичко се пише на C++ Титла: Re: Изгубени в encoding-а Публикувано от: korea60 в Dec 01, 2014, 18:42 #include<locale.h>
int main(){ setlocale(LC_ALL, "Bulgarian"); SetConsoleOutputCP(1251) printf ("%s", Ала бала); } Това ползвам за да мога да изкарам текста на български, работи за C, вероятно е подобно на C++, не съм сигурен. Но сигурно проблема е че искаш целият парснат текст да се преведе, без да ги викаш на отделни части, за това не съм сигурен как става, все някои ще пише нещо. Титла: Re: Изгубени в encoding-а Публикувано от: villimon в Dec 01, 2014, 20:26 Пробвах:
setlocale(LC_ALL, "bulgarian"); SetConsoleOutputCP(1251); std::locale::global(std::locale("")); AnsiToOem(a, b); locale mylocal(""); file.imbue(mylocal); // за файла в който записвам обработването на текста(файла) го правя символ по символ и няма резултат Титла: Re: Изгубени в encoding-а Публикувано от: remotexx в Dec 02, 2014, 04:43 Това което ти трябва е следната библиотека
libicu52 International Components for Unicode поне при мен в тестовия дебиян версията е следната Version: 52.1-6 Size: 28.0 MB International Components for Unicode ICU is a C++ and C library that provides robust and full-featured Unicode and locale support. This package contains the runtime libraries for ICU. Така - това е за пълноценна работа, ако ти трябва само валидиране виж тук - простичко е http://en.wikipedia.org/wiki/UTF-8#Description Имай предвид че тази кодировка е с променлив брой байтове per code point от 1 до 6 байта на символ П.П. но дори и правилно валидиран текст пак може да е пълна безсмислица (напр. шщюя) та ако ще е професионално обик. се ползва съвместно и с библиотека за разпознаване на езика libexttextcat https://packages.debian.org/search?keywords=libexttextcat |