
Новичок
Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.9.2011
Репутация: нет Всего: нет
|
| Цитата(kshyms @ 27.11.2011, 21:17) | | Код | //Программы перекодировки KOI в WIN #ifndef __CODEPAGE_H__ #define __CODEPAGE_H__
// Константы для кодовых страниц #define CP_KOI8 20866 #define CP_KOI8R 20866 #define CP_KOI8U 21866 #define CP_ISO_8859_5 28595
// Исключительно для удобства #define CP_1251 1251
// Прототип функции-обертки BOOL ConvertCP(UINT uiIN, UINT uiOUT, LPSTR lpString);
// Инлайновые обертки для сокращения кода
// Самая нужная из них inline BOOL ConvertCP(UINT uiIN, UINT uiOUT, CString& szString){ BOOL bRet = ConvertCP(uiIN, uiOUT, szString.GetBuffer(szString.GetLength()+1)); szString.ReleaseBuffer(); return bRet; }
// Аналогичные можно определить по вкусу, смотря какое // преобразование используется чаще inline BOOL ConvertToKOI8(UINT uiIN, LPSTR lpString){ return(ConvertCP(uiIN, CP_KOI8R, lpString)); }
inline BOOL ConvertFromKOI8(UINT uiOUI, LPSTR lpString){ return(ConvertCP(CP_KOI8R, uiOUI, lpString)); }
inline BOOL ConvertToKOI8(UINT uiIN, CString& szString){ return(ConvertCP(uiIN, CP_KOI8R, szString)); }
inline BOOL ConvertFromKOI8(UINT uiOUI, CString& szString){ return(ConvertCP(CP_KOI8R, uiOUI, szString)); }
|
может это поможет? |
Спасибо за пример, но к сожалению не пригодился, так как решил пойти другим путём. Вот код: | Код | #include <iostream> #include <cstdio> #include <cstdlib> #include <locale> #include <fstream>
using namespace std;
void checkFile (char* fileName) { char str01[1000]={0}; // массив для хранения текущей строки из файла char str02[10000]={0}; // массив для хранения всего текста из файла string filetext; // строка для хранения всего текста из файла
ifstream testListTosearch(fileName); while (! testListTosearch.eof()) { testListTosearch.getline(str01, sizeof(str01)); strcat (str02, str01); strcat (str02, "\n"); }
filetext=str02; testListTosearch.close();
int begsymbpos = filetext.find("п»ї"); // позиция в которой находится специальный символ utf-8
if (begsymbpos!=0) // если позиция не равна нулю, т.е. началу файла то... { filetext.insert(0, "п»ї"); // добавить этот символ } ofstream addS(fileName); addS << filetext; // Запись текста в изначальный файл вместе со спец. символом addS.close(); }
string utfConvert (char* filename) { char getedList[10000]={0}; // массив для хранения всего текста из файла char stringForGet[1000]={0}; // массив для хранения текущей строки из файла
ifstream getListTosearch(filename); while (! getListTosearch.eof()) { getListTosearch.getline(stringForGet, sizeof(stringForGet)); strcat (getedList, stringForGet); strcat (getedList, "\n"); } getListTosearch.close();
string str1=getedList; // строка для хранения всего текста из файла for (;;) // Цикл который отвечает за поиск utf-8 символов и их замену в тексте на кирилические символы { int symb1 = str1.find("Р°"); int symb2 = str1.find("Р±"); int symb3 = str1.find("РІ"); int symb4 = str1.find("Рі"); int symb5 = str1.find("Рґ"); int symb6 = str1.find("Рµ"); int symb7 = str1.find("С‘"); int symb8 = str1.find("Р¶"); int symb9 = str1.find("Р·"); int symb10 = str1.find("Рё"); int symb11 = str1.find("Р№"); int symb12 = str1.find("Рє"); int symb13 = str1.find("Р»"); int symb14 = str1.find("Рј"); int symb15 = str1.find("РЅ"); int symb16 = str1.find("Рѕ"); int symb17 = str1.find("Рї"); int symb18 = str1.find("СЂ"); int symb19 = str1.find("СЃ"); int symb20 = str1.find("С‚"); int symb21 = str1.find("Сѓ"); int symb22 = str1.find("С„"); int symb23 = str1.find("С…"); int symb24 = str1.find("С†"); int symb25 = str1.find("С‡"); int symb26 = str1.find("С€"); int symb27 = str1.find("С‰"); int symb28 = str1.find("СЉ"); int symb29 = str1.find("С‹"); int symb30 = str1.find("СЊ"); int symb31 = str1.find("СЌ"); int symb32 = str1.find("СЋ"); int symb33 = str1.find("СЏ"); int symb34 = str1.find("Рђ"); int symb35 = str1.find("Р‘"); int symb36 = str1.find("Р’"); int symb37 = str1.find("Р“"); int symb38 = str1.find("Р”"); int symb39 = str1.find("Р•"); int symb40 = str1.find("РЃ"); int symb41 = str1.find("Р–"); int symb42 = str1.find("Р—"); int symb43 = str1.find("Р"); int symb44 = str1.find("Р™"); int symb45 = str1.find("Рљ"); int symb46 = str1.find("Р›"); int symb47 = str1.find("Рњ"); int symb48 = str1.find("Рќ"); int symb49 = str1.find("Рћ"); int symb50 = str1.find("Рџ"); int symb51 = str1.find("Р "); int symb52 = str1.find("РЎ"); int symb53 = str1.find("Рў"); int symb54 = str1.find("РЈ"); int symb55 = str1.find("Р¤"); int symb56 = str1.find("РҐ"); int symb57 = str1.find("Р¦"); int symb58 = str1.find("Р§"); int symb59 = str1.find("РЁ"); int symb60 = str1.find("Р©"); int symb61 = str1.find("РЄ"); int symb62 = str1.find("Р«"); int symb63 = str1.find("Р¬"); int symb64 = str1.find("Р"); int symb65 = str1.find("Р®"); int symb66 = str1.find("РЇ");
if (symb1>0) { str1.replace(symb1, 2, "а"); } else if (symb2>0) { str1.replace(symb2, 2, "б"); } else if (symb3>0) { str1.replace(symb3, 2, "в"); } else if (symb4>0) { str1.replace(symb4, 2, "г"); } else if (symb5>0) { str1.replace(symb5, 2, "д"); } else if (symb6>0) { str1.replace(symb6, 2, "е"); } else if (symb7>0) { str1.replace(symb7, 2, "ё"); } else if (symb8>0) { str1.replace(symb8, 2, "ж"); } else if (symb9>0) { str1.replace(symb9, 2, "з"); } else if (symb10>0) { str1.replace(symb10, 2, "и"); } else if (symb11>0) { str1.replace(symb11, 2, "й"); } else if (symb12>0) { str1.replace(symb12, 2, "к"); } else if (symb13>0) { str1.replace(symb13, 2, "л"); } else if (symb14>0) { str1.replace(symb14, 2, "м"); } else if (symb15>0) { str1.replace(symb15, 2, "н"); } else if (symb16>0) { str1.replace(symb16, 2, "о"); } else if (symb17>0) { str1.replace(symb17, 2, "п"); } else if (symb18>0) { str1.replace(symb18, 2, "р"); } else if (symb19>0) { str1.replace(symb19, 2, "с"); } else if (symb20>0) { str1.replace(symb20, 2, "т"); } else if (symb21>0) { str1.replace(symb21, 2, "у"); } else if (symb22>0) { str1.replace(symb22, 2, "ф"); } else if (symb23>0) { str1.replace(symb23, 2, "х"); } else if (symb24>0) { str1.replace(symb24, 2, "ц"); } else if (symb25>0) { str1.replace(symb25, 2, "ч"); } else if (symb26>0) { str1.replace(symb26, 2, "ш"); } else if (symb27>0) { str1.replace(symb27, 2, "щ"); } else if (symb28>0) { str1.replace(symb28, 2, "ъ"); } else if (symb29>0) { str1.replace(symb29, 2, "ы"); } else if (symb30>0) { str1.replace(symb30, 2, "ь"); } else if (symb31>0) { str1.replace(symb31, 2, "э"); } else if (symb32>0) { str1.replace(symb32, 2, "ю"); } else if (symb33>0) { str1.replace(symb33, 2, "я"); } else if (symb34>0) { str1.replace(symb34, 2, "А"); } else if (symb35>0) { str1.replace(symb35, 2, "Б"); } else if (symb36>0) { str1.replace(symb36, 2, "В"); } else if (symb37>0) { str1.replace(symb37, 2, "Г"); } else if (symb38>0) { str1.replace(symb38, 2, "Д"); } else if (symb39>0) { str1.replace(symb39, 2, "Е"); } else if (symb40>0) { str1.replace(symb40, 2, "Ё"); } else if (symb41>0) { str1.replace(symb41, 2, "Ж"); } else if (symb42>0) { str1.replace(symb42, 2, "З"); } else if (symb43>0) { str1.replace(symb43, 2, "И"); } else if (symb44>0) { str1.replace(symb44, 2, "Й"); } else if (symb45>0) { str1.replace(symb45, 2, "К"); } else if (symb46>0) { str1.replace(symb46, 2, "Л"); } else if (symb47>0) { str1.replace(symb47, 2, "М"); } else if (symb48>0) { str1.replace(symb48, 2, "Н"); } else if (symb49>0) { str1.replace(symb49, 2, "О"); } else if (symb50>0) { str1.replace(symb50, 2, "П"); } else if (symb51>0) { str1.replace(symb51, 2, "Р"); } else if (symb52>0) { str1.replace(symb52, 2, "С"); } else if (symb53>0) { str1.replace(symb53, 2, "Т"); } else if (symb54>0) { str1.replace(symb54, 2, "У"); } else if (symb55>0) { str1.replace(symb55, 2, "Ф"); } else if (symb56>0) { str1.replace(symb56, 2, "Х"); } else if (symb57>0) { str1.replace(symb57, 2, "Ц"); } else if (symb58>0) { str1.replace(symb58, 2, "Ч"); } else if (symb59>0) { str1.replace(symb59, 2, "Ш"); } else if (symb60>0) { str1.replace(symb60, 2, "Щ"); } else if (symb61>0) { str1.replace(symb61, 2, "Ъ"); } else if (symb62>0) { str1.replace(symb62, 2, "Ы"); } else if (symb63>0) { str1.replace(symb63, 2, "Ь"); } else if (symb64>0) { str1.replace(symb64, 2, "Э"); } else if (symb65>0) { str1.replace(symb65, 2, "Ю"); } else if (symb66>0) { str1.replace(symb66, 2, "Я"); } else { break; } } str1.erase(0,3); // удаление спец. символа utf-8 из текста return str1; }
int main() { locale::global(std::locale("rus")); setlocale(LC_CTYPE, "UTF-8");
checkFile ("D:\\file.txt"); cout << utfConvert ("D:\\file.txt");
system("PAUSE"); return 0; }
|
Возможно кому-то пригодится. Я тестировал, вроде всё отображается как надо. Не самое лучшее решение однако оно работает. Хотелось бы узнать что скажут опытные люди по поводу такого решения и есть ли более простой или эстетичный вариант?
|