Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с чтением unicode из файла 
:(
    Опции темы
informn
Дата 24.7.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 15.7.2005

Репутация: нет
Всего: нет



Нужно считать файл(Unicode UTF-16).

Код

#include "stdafx.h"
#include "TChar.h"
#include "iostream"
#include "string"
#include "fstream"
#include "Windows.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char ch[1000];
    wchar_t    chu[1000];
    wchar_t    chu1[100];
    wifstream inDictFile;
    
    inDictFile.open("test.txt", ios::in);
    int i;
    i=0;
    for (i=0; i< 100; i++)
        {
            inDictFile.getline(chu,900);
            WideCharToMultiByte(1252,0, chu,-1, ch,1000, NULL, NULL);
        }

    return 0;
}



Вот код, ктр. это делает, но возникает такая проблема:
Если просматривать содержимое chu, то через 1 символ содержится 0-символ.
В chu содержится
[0] 255 'ÿ' wchar_t
[1] 254 'þ' wchar_t
[2] 60 '<' wchar_t
[3] 0 wchar_t
[4] 97 'a' wchar_t
[5] 0 wchar_t
[6] 114 'r' wchar_t
[7] 0 wchar_t
[8] 116 't' wchar_t
[9] 0 wchar_t
[10] 105 'i' wchar_t
[11] 0 wchar_t
[12] 99 'c' wchar_t
[13] 0 wchar_t
[14] 108 'l' wchar_t
Откуда берутся символы [0] 255 'ÿ' wchar_t и [1] 254 'þ' wchar_t(их нет в исходном файле)? может быть это признак unicode текста?
вот начало файла:
<article id="1

При преобразовании WideCharToMultiByte он преобразует не всю строку, а только её часть до первого 0. Как убрать эти лишние 0.
Может быть это можно сделать как попроще?

Компилятор visual c++ 7.1


рихтера читал, но там как-то всё мутно и без конкретных нормальных примеров. может быь ещё где стоит почитать?

Это сообщение отредактировал(а) informn - 24.7.2005, 17:22
PM MAIL   Вверх
Дрон
Дата 25.7.2005, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(informn @ 24.7.2005, 18:20)
Откуда берутся символы [0] 255 'ÿ' wchar_t и [1] 254 'þ' wchar_t(их нет в исходном файле)? может быть это признак unicode текста?

В общем, да. Кроме того, они обозначают порядок следования старшего/младшего байтов.

Цитата(informn @ 24.7.2005, 18:20)
Если просматривать содержимое chu, то через 1 символ содержится 0-символ.

Так ты по байтам, похоже, просматриваешь. А unicode-то - двубайтный. Для латинских букв старший байт содержит 0, а младший -- ASCII-код. Т.е. там всё нормально.

Цитата(informn @ 24.7.2005, 18:20)
При преобразовании WideCharToMultiByte он преобразует не всю строку, а только её часть до первого 0.

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


--------------------
Да. Именно так.
PM   Вверх
maxim1000
Дата 25.7.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



попробуй вручную посчитать длину строки и передать ее вместо -1
хотя все равно что-то не то...


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.