Вопрос по С++

setty

Граф
имхо это не проблемма твоей программы а проблема блокнота, гдето слышал что у него есть бага в работе с юникодом. скачай к нему патч )
 

GrAndSE

Тёмный
Модератор
замена char на wchar_t не помогла - тоже самое
смотрел в wath window считывается в wchar_t бред и этот же бред записывается в выходящий файл, хотя мазила всё норм читает - блокнот мажется и файл открывает как пустой
наверное он открывает файл с кодировкой UTF-8 как файл c другой кодировкой
грррр как в C++ поставить в атрибутах исходящего файла, что он написан в кодировке юникода??
У меня ест ьподзрение такое гадкое, что твоя программа работает, а выполнять ничего н евыполняет.
А какой оболочкой (я так понимаю "wath window" из ниоткуда не берется, особенно для откомпилированых исходников :)) было всё это дело просмотрено?
А касательно блокнота, то попробуй просмотреть результат с помощью, например, "едитора" встроенного в Тотал - эта штку с кодировками дружит на ура.
 

setty

Граф
Листинг кванта компилится и отлично работает (VS6). Единственное - я б посоветовал проверять результат выполнения
in = fopen ("index.htm", "r");
потому как если файла не существует то он не создастся как при
ou = fopen ("new.index.htm", "w");
в резуьтате имеем конфуз при попытке читать из in:
l = fgetc (in);

вот ссыль на проблемму блокнота с юникодом
 
Останнє редагування:

GrAndSE

Тёмный
Модератор
Листинг кванта компилится и отлично работает (VS6). Единственное - я б посоветовал проверять результат выполнения
in = fopen ("index.htm", "r");
потому как если файла не существует то он не создастся как при
ou = fopen ("new.index.htm", "w");
в резуьтате имеем конфуз при попытке читать из in:
l = fgetc (in);

вот ссыль на проблемму блокнота с юникодом
VS6 компилятор поддерживает нормальное чтение из Юникода? Именно стандартным <stdio.h>? Хотя в принцыпе это не существенно если работа идёт с Английскими символами. Эти по-моему корректно везде распознаваться должны
 

quant

yeah
b.s. setty спасиба за линк - много интересного
ух блин так юникод это не совсем utf-8
точнее utf-8 это не совсем юникод
вот какойто алгоритм конвертации utf-8 в юникод
Код:
#define LOWER_6_BIT(u)    ((u) & 0x003f)
#define BIT7(a)           ((a) & 0x80)
#define BIT6(a)           ((a) & 0x40)

// Converts UTF-8 to unicode
// -------------------------
// lpSrcStr     Points to UTF8 encoded string
// cchSrc       Length of UTF8 string
// lpDestStr    Points to output buffer
// cchDest      Number of bytes in output buffer
int UTF8ToUnicode (char *lpSrcStr, int cchSrc, wchar_t *lpDestStr, int cchDest)
{
    int nTB = 0;    
    int cchWC = 0;  
    char *pUTF8 = lpSrcStr;
    char UTF8;

    while ((cchSrc--) && ((cchDest == 0) || (cchWC < cchDest)))
    {
        if (BIT7(*pUTF8) == 0)
        {
            if (cchDest)
                lpDestStr[cchWC] = (wchar_t)*pUTF8;
            cchWC++;
        }
        else if (BIT6(*pUTF8) == 0)
        {
            if (nTB != 0)
            {
                nTB--;
                if (cchDest)
                {
                    lpDestStr[cchWC] <<= 6;
                    lpDestStr[cchWC] |= LOWER_6_BIT(*pUTF8);
                }
                if (nTB == 0)
                    cchWC++;
            }
        }
        else
        {
            if (nTB > 0)
            {
                nTB = 0;
                cchWC++;
            }
            else
            {
                UTF8 = *pUTF8;
                while (BIT7(UTF8) != 0)
                {
                    UTF8 <<= 1;
                    nTB++;
                }
                if (cchDest)
                    lpDestStr[cchWC] = UTF8 >> nTB;
                nTB--;
            }
        }
        pUTF8++;
    }
    return cchWC;
}
в моей проблеме кодировка utf-8 на выходе хотелось бы получить такую же
кстати после конвертации в конце каждой страницы присутствует знак вопроса O.o
алгоритм робочий! не юникод лапатит на ура - на Windows, скомилировал gcc на Ubuntu - нифига не делает
страничку берёт, шото с ней делает, а на выходе точно такая же
мдааа я себе кодировки раньше представлял совсем по другому, почитав вижу нефиг мне вводить wchar_t - у меня все символы на латинице, а я пытался заменив вот это
Код:
	const wchar_t math[]={L"ktv"}, zamena[]=(L"vip");
	wchar_t l;
	int counter = 0, cc = 0, leng = (sizeof(math) >> 1) - 1, zleng = (sizeof (zamena) >> 1) - 1, j;
ладно щас попробуем-с
итак всё вродебы работает но неасилил мой алгоритм 3 весчи - перевод строки, значок (c) и конец файла
 
Останнє редагування:

alexmore

JuveFan
Товарищи, нужен Borland C++ (не Builder) с досовским интерфесом.
Оболочка очень похожа на паскалевскую. Буду очень благодарен.
 

GrAndSE

Тёмный
Модератор
алгоритм робочий! не юникод лапатит на ура - на Windows, скомилировал gcc на Ubuntu - нифига не делает
страничку берёт, шото с ней делает, а на выходе точно такая же
Может проблемма в "дефолтной" кодировке? Я точно не помню, но кажись у gcc какая-то привязка есть к системной кодировке. Посмотри этот момент. Может там тебе ничего даже конвертировать не нужно будет :)
 

quant

yeah
Відповідь: Вопрос по С++

Код:
   printf ("8 & 4 = %d\n", 8 & 4);
   if (8 & 4 == 0)
      { printf ("zero\n"); };
   printf ("endline\n");
запускаю...
Код:
8 & 4 = 0
endline
:eusa_wall
 
Зверху