Проблема с записью в файл(utf-8)

Тема в разделе "C/C++/C#", создана пользователем solova, 16 авг 2010.

  1. solova

    solova Гость

    Пишу в MS Visual , C++.
    В общем проблема такая.

    открываю файл в бинарном режиме(чтобы fseek ftell правильно работали)
    fopen_s(&file,"test.xml","r+b");
    в файле английский текст формата UTF-8
    встаю в файле на определённую позицию
    создаю переменную и инициализирую
    char ch[2]="Ж";

    И вот вопрос .Как записать её в файл?

    как я понял русский символ занимает 2 байта ,а английский -1 байт.
    если я из переменной ch записываю 2 байта то фигня в файле какая то происходит (открываю файл через Notepad++ и на месте записи чёрным выделено (16-ричное значение)если переменная "Ж"то оно равно"C6" -первый байт и надпись (NUL)-второй байт)
    если в ручную прописать русскую букву то всё правильно отображает

    короче пробовал по разному получалось всякое но не то что надо.


    заранее спасибо за помощь.
     
  2. romanriddick

    romanriddick Гость

    ха-ха .... значет так , вот ето
    char ch[2]="Ж";

    означет что вы обявляете массив ch[2] розмерностю 2 (не байт , а строк!!!) и НУЛЕВОМУ символу присваеваете "Ж" .
    Тогда запись (под MS Visual C++. не пишу , по етому что не знаю как записывать в файл) нужно делать так
    fprint_s("test.xml","ch[0]")
    добавляэм ch в конец файла

    для уверенности пишем char ch[2]="Ж";
    двумя строками
    char ch[2];
    ch[0]="Ж";

    а то фиг ево знает что там MS намутило в своем компиляторе)))
     
  3. solova

    solova Гость

    даа ,тут я уже запарился,
    char ch[2];
    ch[0]='Ж';

    делал так но после записи снова отображается символы "C6"выделенные чёрным а через простой нотепад это выглядит как квадратик

    кодировки не сходятся наверно
     
  4. romanriddick

    romanriddick Гость

    нет , не должны .пробуйте целый файл присвоить динамическому массиву , потом сотритувсе данные в файле и опять запишите их в файл

    если не сработает на крайняк посмотрите коды ISO ... например chr(54) где chr ето функция которая преобразует код в символ 54 -- ваш символ
    ето 100 процентный метод , он не зависит от кодировок
    П.С.: в назве функции я не уверен , поищите в инете "робота с строками" ... етот метод я применял к vba+excel , все работало
     
  5. solova

    solova Гость

    1)файлы больших размеров 1-2МБ -большие массивы,много времени.
    я пытался вставить строчку целиком в месте с русским символом-не получалось(та же хрень).
    2)в кодировках я полный ноль
    посмотрел про chr()
    как я понял ей надо передать код символа из таблицы UTF-8?
    и как её записывать ?
    например fwrite(chr(QWER),1,sizeof(chr(QWER)),&File);?
    тут в первой переменной надо передавать указатель на строку или саму строку, а "chr(QWER)" сойдёт на указатель?
    пс: А понял её надо присваивать переменной char-а или string-а и переменную уже в функцию записи пихать
    (не на своём компе-не могу проверить)
     
  6. romanriddick

    romanriddick Гость

    если QWER ето переменная типа int то да
    fwrite(chr(QWER),&File); записываем в конец файла
    посмотрел в книге , код Ж ето 134 ... но не написано в какой кодировке
     
Загрузка...
Похожие Темы - Проблема записью файл(utf
  1. lira89
    Ответов:
    4
    Просмотров:
    2.501
  2. AgniXRudra
    Ответов:
    2
    Просмотров:
    50
  3. Zloikaktus
    Ответов:
    0
    Просмотров:
    28
  4. c0de3r
    Ответов:
    5
    Просмотров:
    153
  5. DobermannTT
    Ответов:
    10
    Просмотров:
    157

Поделиться этой страницей