![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
????? вместо русских букв [D5, Win2k]
StarCon © (2002-10-10 14:58:00)блин, ну помню же что обходил это дело!
заклинило....
беру текст из ричэдита и записываю в эксель
открываю полученный файл - ????? вместо русских букв
что делать то?
StarCon (2002-10-11 11:28:00) [1]Ребята! проблема осталась...
ОЕМtoChar не помогло
попробовал еще Utf8toAnsi - без изменений
оказывается, когда беру из обычного ричэдита - все нормально
но мне нужно брать текст из rxRichEdit-a
(из компонента ЭрИкс), видно из-за него вся лажа
а поменять ричэдит я не могу
Zemal (2002-10-10 18:41:00) [2]Кстати, перечитывая свои записки здесь, я немного ошибся и как всегда запутался :). А именно:
>>Эксель он молодец :), он сразу берёт номера символов из
>>таблицы ANSI1251 и подсталяет... вот пойди объясни этому
>>Экселю что это номера символов в кодировке OEM866... :)
Это неправильно! Эксель берёт номера символов в переданной строке и подставляет символы под этими номерами из шрифта, который в нём установлен в соответствии с таблицей ANSI (никак не с ANSI1521!!! цыфры тут непричём!!!) Таблицы ANSI и OEM одни и теже везде и всегда... а номера - это наборы символов в шрифтах... это типа каждый шрифт имеет несколько наборов символов для нескольких языков... русскому языку соответствует 1251... может я и не прав :)... сам бы хотел знать поподробнее об этом. Объяснить никто неможет?
Zemal (2002-10-10 18:26:00) [3]>>МВо
Спасибо! Такое высказывание даёт повод предпологать, что вы действительно Мастер :). Уважаю и приклоняю голову :). Мастер - это человек, а не бог и отличается от других людей тем что учится всегда и не стыдится учиться даже у новичков! Это говорит о правильной психике и правильном складе ума (что в общем-то сильно взаимосвязано)! :)
MBo (2002-10-10 18:05:00) [4]>qube
Я не обладаю абсолютным знанием ;)
Zemal (2002-10-10 18:04:00) [5]>>qube
Первый раз вижу человека, который считает, что если Мастер, то знает всё и даже больше... НЕЛЬЗЯ ЗНАТЬ ВСЁ!!! И нечего этого стыдиться :). У меня тоже во многом есть пробелы... причём огромные... но мне не стыдно... да и до мастера мне далеко... :) гы-гы :))) я туда всегда успею :)!!! Просто я что знаю - то и выкладываю. Может и мастер почерпнёт немного из моего личного опыта... чего в этом плохого? Человек не может знать всё и подробно (ещё раз повторился :) ). У каждого Мастера своя стезя в которой он знает больше других... да и как определить мастера? по каким критериям? на самом деле знания вторичны - образ мышления первичен! не смотреть же мне все анкеты на форуме?! не обижайтесь, если чего не так написал... резкий я человек и открытый :)... НО!!! Обидеть никого не хотел! Если чего не то, то примите мои извинения!
qube (2002-10-10 17:43:00) [6]Zemal © (10.10.02 17:36)
Перед тем, как пускаться в долгие объяснения, анкету не мешает посмотреть.
Первый раз вижу, чтобы мастеру (!) о раскладках рассказывали.
Zemal (2002-10-10 17:36:00) [7]Если кто не понял: по сути дела к таблица ANSI привызаны шрифты... [символ] -> [адрес в таблице ANSI], так что можно установить кучу шрифтов всяких, поддерживающих таблицу ANSI (например украинский), а можно установить кучу таблиц, но(!!!) у каждого шрифта есть ссылка на поддерживаемые таблицы... на счёт Юникодов могу сказать только, что там своя кодировка и символы занимают от 2 до 4 байт... про Юникоды мало чего могу подсказать, т.к. не сталкивался :(.
Zemal (2002-10-10 17:22:00) [8]>>МВо
Да не обижайся... я уж так резко... извини. :) Я хочу сказать, что изменение раскладки наверняка не изменит кодировки... на самом деле многие неправильно представляют что такое строка символов :). На самом деле строка - это номера символов в таблице раскладки... и для корректного преобразования кодировки надо фактически поменять номера в соответствии с номерами символов в другой таблице... а кто это должен сделать как не программист? Я например не понимаю как может повлиять раскладка клавиатуры (текущая), на строку символов в памяти? Эксель он молодец :), он сразу берёт номера символов из таблицы ANSI1251 и подсталяет... вот пойди объясни этому Экселю что это номера символов в кодировке OEM866... :) Вот какраз раскладка это Экселю объяснить и не сможет :). Для этого Экселя разницы нет как отображать... он же не думает :). В данном случае думать должен программер и думать должен отбрасывая шаманство :). В принцыпе функция OEMToChar меняет номера символов в соответствии с таблицами OEM и ANSI (принята по умолчанию в винде). А на этих таблицах в принципе держится региональная таблица... т.е. разъясню: эти функции не привязаны к русскому языку, как вы могли подумать, а лишь конвертируют номера символов... они так же будут корректно работать и с украинским и с узбекским... а текст в том же Экселе будет отображаться исходя из региональных настроек... т.е. какая в винде стоит локация (место нахождения).
MBo (2002-10-10 16:43:00) [9]>Что вы всё с раскладками шаманите?
Простите, дяденька, в вашем присутствии больше не буду ;(
До получения информации о способе переноса была вероятность осуществления его через буфер обмена.
Zemal (2002-10-10 16:38:00) [10]>>REA
Какраз и причём!!! У паря всё получилось безо всяких Юникодов ваших :). Если интересно, то надо вот так делать:
for i := 0 to StrLst.Count-1 do
OemToChar(PChar(StrLst[i]), PChar(StrLst[i]));
Можно и обратную конвертацию... и всё корректно :). Главное что всегда работает... и всегда корректно... а от преобразования в Юникод мне кажется никакого толку небудет :)
REA (2002-10-10 16:16:00) [11]OEM и ANSI тут явно не причем. Эта тема была недавно в форуме - ищи. Может в юникод сконвертировать или WideString(String)?
Zemal (2002-10-10 16:08:00) [12]>>StarCon
напиши мне письмецо... я тебе пример пришлю как конвертнуть сразу все элементы списка порождённые от класа TString.
StarCon (2002-10-10 16:02:00) [13]Во-во! правильно!
но OEMToChar конверит буфер
а как бы из строки взять и в строку запихать
Zemal (2002-10-10 15:50:00) [14]>>МВо
Что вы всё с раскладками шаманите? Причём тут системная раскладка клавиатуры?!!! Она как-раз и непричём. Слышали про таблицы OEM и ANSI? Конвертировать надо!!! Есть стандартные апишные функции Винды инкапсулированные в Делфи: CharToOEM и OEMToChar... я вообще не пойму почему это все раскладками клавы интересуются?! Неужели помогает?! Хотя вполне возможно... Винда автоматом конвертит при передачи OLE объектов... какраз при выбросе текста в Эксель... :))) гы-гы... но лучше не раскладки юзать а самому конвертить :)... больше уверенности, что так всегда будет работать и на любом компе...
З.Ы. Забыл добавить... не все версии Виндовс поддерживают эти функции... помоему в 95 есть какие-то другие аналоги... помоему ANSIToOEM... или что-то вроде... гляньте сами в хелпаках.
StarCon (2002-10-10 15:50:00) [15]ColStr := RichEdit.Lines.Strings[i] естественно
StarCon (2002-10-10 15:49:00) [16]XL := CreateOleObject("Excel.Application");
XL.WorkBooks.Add;
XL.Visible := False;
XL.WorkBooks[1].WorkSheets[1].Cells[NumY, i+1] := Trim(ColStr);
MBo (2002-10-10 15:43:00) [17]Как в excel записываешь?
StarCon (2002-10-10 15:32:00) [18]угу, это сразу попробовал - не помогает
MBo (2002-10-10 15:28:00) [19]попробуй ра складку на русскую переключить