Поиск:

Ответ в темуСоздание новой темы Создание опроса
> doc файл и unicode 
:(
    Опции темы
knut
Дата 4.8.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день.
у меня проблеама с записю юникода в док файл.
ситуация след.
есть текстовый файл сохраненнык как utf8 (юникод текст) так вот читаю я этото текст и записываю в док файл.
вот функция каторая читает текстовый файл.
Код

std::wstring bookmarkName;
std::wstring bookmarkValue;

  typedef std::map<std::wstring, std::wstring> bookmark_t;  
  bookmark_t bookmarks;

  while (getline(in, bookmarkName, L',')) {
   getline(in, bookmarkValue);    
    bookmarks[bookmarkName] = bookmarkValue;
  }
  in.close();

 вот кусок работы с доком
Код

_ApplicationPtr word(L"Word.Application");
_DocumentPtr wdoc1 = word->Documents->Add(&_variant_t("d:\\tmp\\test.doc"));
.......
bm->Range->Text = _bstr_t(value.c_str()); //  запись
......
wdoc1->SaveAs(&_variant_t("d:\\tmp\\save.doc"));

так вот в итоге в док поподают какие то не понятные символы
мне надо док открыть как утф? или сохранить как утг8?
как решить проблему?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
xvr
Дата 4.8.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Что то у меня большие сомнения, что getline будет читать UTF-8 кодировку. Это все же не wchar_t, в multibyte кодировка, и читать ее надо как char*, а потом переводить в wchar

PM MAIL   Вверх
knut
Дата 4.8.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Это все же не wchar_t, в multibyte кодировка, и читать ее надо как char*, а потом переводить в wchar

xvr
это как можно пример?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
xvr
Дата 4.8.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(knut @ 4.8.2009,  13:00)
Цитата

Это все же не wchar_t, в multibyte кодировка, и читать ее надо как char*, а потом переводить в wchar

xvr
это как можно пример?

Пример чего? Кодировки UTF-8? Или как из нее сделать wchar? Если последнее, то см. функцию MultiByteToWideChar c CP_UTF8
Сама по себе UTF-8 (для нижней половины ASCII) является обычной символьной кодировкой, т.е. обычный текст, 1 символ - 1 байт (в отличие от Unicode'а). Если нужно закодировать другие символы, то для них используют префиксы. В общем длинна 1го Unicode символа в UTF-8 может варьироваться от 1 до 6ти (кажется) байтов

PM MAIL   Вверх
knut
Дата 5.8.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



xvr
вот мой код карорый заменяет боокмарки текстом 
но стоит мне раскоментировать //1 то у меня прога летить в чем дело?
Код

using namespace Word;
    using namespace Office;
    _ApplicationPtr word(L"Word.Application");
    _DocumentPtr wdoc1 = word->Documents->Add(&_variant_t("d:\\tmp\\test.docx"));
    //_DocumentPtr wdoc1 = word->Documents->Add(&_variant_t(doc_path.c_str()));
    
    
    BookmarksPtr wbm1 = wdoc1->Bookmarks;
    int bmCount = wbm1->Count;

    //printf("Total Bookmarks: %d\n", bmCount = wbm1->Count);
    wbm1->DefaultSorting = wdSortByName;
    BookmarkPtr bm;
    _bstr_t res;
    //std::wstring res;
    for(int i = 1; i <= bmCount; i++)
    {
        printf("\t%2d: ", i);
        
        if(wbm1){
            bm = wbm1->Item(&_variant_t(i));
            res = bm->Name; 
        }
        
       // printf("%s -", (LPCTSTR)res );
    
        std::wstring key =  res;
        std::wstring value = r_value[key];
        bm->Range->Text = _bstr_t(value.c_str()); //1 это строка мне портит мне вот это  bm = wbm1->Item(&_variant_t(i));
        
        printf("\tOK.\n");

в чем дело?
почему 
 //1 это строка мне портит мне вот это  bm = wbm1->Item(&_variant_t(i));

Это сообщение отредактировал(а) knut - 5.8.2009, 17:21


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
knut
Дата 5.8.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



почему у меня 
res = bm->Name портится?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
knut
Дата 5.8.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Помогите разобратся 
bm = wbm1->Item(&_variant_t(i));
bm->get_Name(res);
bm->Range->Text = "asa";
почему летит ?
убираю 
bm->Range->Text = "asa";
все нормално но мне надо текс записать
в чем дело что я делаю не так?




--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
xvr
Дата 5.8.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Хз, попробуй bm->Range->Text = L"asa";
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




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


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

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