Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Вниз

Срочно нужна ваша помощь (OemToChar)!!!!!   Найти похожие ветки 

 
__Dmitry__   (2003-08-04 10:47) [0]

При вызове этой функции происходит замна символов псевдографики на латинские символы, типа уголки - это L, а длинная черточка это "минус". И тому подобноее.
НО мне этого не нужно!!! Можно ли отключить эту возможность или как нибудь использовать другое преобразование?
Писать свою таблицу декоддинга, нет возможности. Поскольку для других досовских кодировок также придеться писать таблицы.
Что мне делать?


 
McSimm   (2003-08-04 11:18) [1]


> НО мне этого не нужно!!!

А что нужно?
---

> Что мне делать?

Транслировать выборочно, например.


 
__Dmitry__   (2003-08-04 11:33) [2]

>А что нужно?
Ну вот пример. Допустим есть слово в в Win кодировке

Привет

оно после OemToChar преобразуется к виду.

¦ЁштхЄ Обратите внимание на первый символ!

Теперь после CharToOem все это вернется к такому виду

іривет

Т.е. это уже не правильно. :((




 
McSimm   (2003-08-04 11:41) [3]

Это для какой такой задачи потребовалось строку в Win кодировке передавать в OemToChar? :)


 
__Dmitry__   (2003-08-04 11:57) [4]

У меня есть редактор и нужна перекодировка "туда-назад".
А как по другому?


 
sniknik   (2003-08-04 11:59) [5]

__Dmitry__ (04.08.03 11:33)
тут ошибка, из виндовой в виндовую преобразоваваеш, естественно.
делай с начала из Привета CharToOem после OemToChar, получиш один в один.


 
__Dmitry__   (2003-08-04 12:11) [6]

Спасибо, но
Это не суть важно.
Еще раз
Есть виндовый файл. Он был "случайно" сконвертирован как ДОС.
Когда я пытаюсь то что было прочитанр как ДОС перевести в ВИН.
ТО не получается, т.к. заглавные буквы теряются.
Между тем, например в редакторе FAR нормально конвертируется "туда-обратно"


 
VMcL   (2003-08-04 12:23) [7]

>__Dmitry__ (04.08.03 12:11)

Без 100 грамм.... whoops... в смысле без текста программы - не разобраться.


 
__Dmitry__   (2003-08-04 12:31) [8]

Идея проста, ну например две процедуры


procedure TMainDialog.WinToDos;
var Src:PChar;
begin
Src := Editor.Lines.GetText;
CharToOem(Src, Src);
Editor.Lines.Text := StrPas(Src);
end;

procedure TMainDialog.DosToWin;
var Src:PChar;
begin
Src := Editor.Lines.GetText;
OemToChar(Src, Src); ( Src)
Идея проста, ну например две процедуры


procedure TMainDialog.WinToDos;
var Src:PChar;
begin
Src := Editor.Lines.GetText;
CharToOem(Src, Src);
Editor.Lines.Text := StrPas(Src);
end;

procedure TMainDialog.DosToWin;
var Src:PChar;
begin
Src := Editor.Lines.GetText;
OemToChar(Src, Src);
Editor.Lines.Text := StrPas(Src);
end;


Есть редактор. Нажимаю "Смотреть как ДОС". Вызываю DosToWin;
"Смотреть как WIN" Вызываю WinToDos;

проблемы начинаются если, был текст WIN и я нажал "Смотреть как DOS". Попытавшись переключится назад "Смотреть как WIN". Верхний регистр пропадает.


 
McSimm   (2003-08-04 12:37) [9]

Не надо преобразовывать обратно. Надо использовать исходный текст.


 
__Dmitry__   (2003-08-04 12:45) [10]

Это же редактор! А если пользователь успел что то изменить в файле? Что тогда?


 
sniknik   (2003-08-04 13:08) [11]

__Dmitry__ (04.08.03 12:45)
сделай при изненении кодировки выход из режима редактирования, а если юзер после зашол в редактирование и начал менять кракозябры - сам виноват.


 
__Dmitry__   (2003-08-04 13:32) [12]


> а если юзер после зашол в редактирование и начал менять
> кракозябры - сам виноват.

Виноват будет разработчик - создавший такю недобную вещь :)

Всем знаком редактор в ФАРе? Я хочу реализовать такуюже функциональность. А ведь там проблема решена. Значит это возможно.

Неужели это такая сложная задача не имеющая решения?


 
Anatoly Podgoretsky   (2003-08-04 13:47) [13]

Обратной дороги нет, поскольку при перекодировании из Дос в Вин, многие символы будут преобразованы в одни и теже коды.
И подход не вполне верный, кодировка должна меняться только при открытии и закрытии документов, а не на ходу, иначе такие последствия гарантированы.


 
__Dmitry__   (2003-08-04 13:54) [14]

Ну хорошо, допустим. Проблема не решаема...

А Far мне тоже приснился? Там ведь на лету происходит перекодировка.


 
sniknik   (2003-08-04 13:56) [15]

__Dmitry__ (04.08.03 13:32)
в фаре нет выбора из какой в какую преобразовывать, и нет возможности ошибиться и винды в винды переводить.
а если редактировать в "кракозябрах" то их же и получиш при преобразовании.
так как там сделать просто, то что ты хочеш невозможно (не, можно конечно собственные перекодировочные таблици, но это тоже будет часть всего, из виндов в винды научишся переводить из виндов в дос разучишся (таблици пересекутся)).


 
McSimm   (2003-08-04 14:04) [16]

Работает редактор FAR именно так, как нужно __Dmitry__.


 
Palladin   (2003-08-04 14:15) [17]

FAR использует свои таблицы для перекодировок туда-обратно


 
sniknik   (2003-08-04 14:43) [18]

McSimm © (04.08.03 14:04)
> Работает редактор FAR именно так, как нужно __Dmitry__.
тогда почему он также не сделает? зачем виндовую кодировку в виндовую пытается преобразовать?

чего проще, открываеш в заданной без преобразований и ставиш начальное "Win", нажал кнопку на преобразование и начальное "Win" значит в "Dos", нет значит наоборот и никаких коллизий.


 
__Dmitry__   (2003-08-04 14:48) [19]


> FAR использует свои таблицы для перекодировок туда-обратно

Как я понимаю DOS кодировка индивидуальна для каждого языка. Мне не тяжело написать "русскую перекодировку". Но боюсь в этом случае для других языков будет проблема. OemToChar тем и хорош что учитывает эти ньюансы.

Вопрос остается открытым...


 
Palladin   (2003-08-04 15:13) [20]

Ну ты же сам видишь что получается при использовании OemToChar


 
__Dmitry__   (2003-08-04 15:23) [21]

Вижу, именно по этому ищу пути решения.
Все было бы ок если бы эта функция не пыталас заменять символы псевдографики на похожие символы из неименяемого диапазона. ПРимер этого я приводил в самом верху.
Возможно есть способ повлиять на OemToChar что бы он не делал этого.


 
Anatoly Podgoretsky   (2003-08-04 15:24) [22]

Тоже отностится и к Виндоус, и не относится к юникод. Кроме того учти, что в виндоуских кодировках нет псевдографики.


 
McSimm   (2003-08-04 15:27) [23]

>Возможно есть способ повлиять на OemToChar что бы он не делал этого.
Нет.

Делай таблицу. Если очень надо (а надо ли?!), делай много таблиц. Их хоть и много, но все же ограниченное количество.


 
panov   (2003-08-04 15:35) [24]

На лету ни один редактор не отрабатывает.

Если хочешь делать перекодировки после изменений, то сохраняй все изменения где-то(History) и перекодируй все по-отдельности


 
sniknik   (2003-08-04 15:38) [25]

__Dmitry__ (04.08.03 15:23)
> Вижу, именно по этому ищу пути решения
решение -> (?)
единственая проблема определить изначальную кодировку (пусть задает пользователь в какой открывать), дальше уже не спутаеш (просто не давай выбора как в фаре).
посмотри как WordPad сделан (открытие), текст/текст Dos/...


 
__Dmitry__   (2003-08-04 16:00) [26]


> Если хочешь делать перекодировки после изменений, то сохраняй
> все изменения где-то(History) и перекодируй все по-отдельности

Это достаточно сложно и не реально по срокам.


> просто не давай выбора как в фаре

А если мне нужно давать выбор?

Кто нибудь знает таблицы ДОС для других языков?


 
Palladin   (2003-08-04 16:02) [27]

цифры языковой привязанности не имеют...


 
McSimm   (2003-08-04 16:07) [28]

Эти? :)))
437 MS-DOS United States
708 Arabic (ASMO 708)
709 Arabic (ASMO 449+, BCON V4)
710 Arabic (Transparent Arabic)
720 Arabic (Transparent ASMO)
737 Greek (formerly 437G)
775 Baltic
850 MS-DOS Multilingual (Latin I)
852 MS-DOS Slavic (Latin II)
855 IBM Cyrillic (primarily Russian)
857 IBM Turkish
860 MS-DOS Portuguese
861 MS-DOS Icelandic
862 Hebrew
863 MS-DOS Canadian-French
864 Arabic
865 MS-DOS Nordic
866 MS-DOS Russian (former USSR)
869 IBM Modern Greek
874 Thai
932 Japan
936 Chinese (PRC, Singapore)
949 Korean
950 Chinese (Taiwan, Hong Kong)
1361 Korean (Johab)


 
sniknik   (2003-08-04 16:10) [29]

> А если мне нужно давать выбор?
а если доверять спички детям то будь готов к вызову пожарных. (ты либо доверяеш со всеми вытекающими, как грамотному юзеру, либо нет с ограничениями )

> Кто нибудь знает таблицы ДОС для других языков?
Language drivers в BDE хелп
dBASE CHS cp936 DB936CN0 DOS CODE PAGE 936 dBASE China
dBASE CHT cp950 DB950TW0 DOS CODE PAGE 950 dBASE Taiwan
dBASE CSY cp852 DB852CZ0 DOS CODE PAGE 852 dBASE Czech852
dBASE CSY cp867 DB867CZ0 DOS CODE PAGE 867 dBASE Czech867
.....
и т.д. в количестве > 40шт. толко для dBase(у Парадокса некоторые не совпадают "страницами"), подозреваю что это далеко не все ;о)).


 
__Dmitry__   (2003-08-04 16:11) [30]

McSimm
Черт возми!!!! Неужели так много. Похоже идея протухла :(((
Хотя не могу поверить что бы в ФАРе были зашиты все эти кодировки...
Может быть есть некая закономерность в рассположении символов?


 
McSimm   (2003-08-04 16:25) [31]

>__Dmitry__ (04.08.03 16:11)
Я не уверен, что FAR умеет кодировать по всем этим таблицам.
Есть обоснованное подозрение (но не уверенность), что он знает только 866.
Проверить не могу.


 
Anatoly Podgoretsky   (2003-08-04 16:27) [32]

__Dmitry__ (04.08.03 16:11)
Что ты во много раз больше.


 
Anatoly Podgoretsky   (2003-08-04 16:28) [33]

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


 
Palladin   (2003-08-04 16:50) [34]


> __Dmitry__ (04.08.03 16:11)

Все что есть в Far ты можешь видеть если зайдешь в его папку...


 
__Dmitry__   (2003-08-04 17:07) [35]


> Palladin

Да??? В таком случае немного. И уж по крайней мере досовских кодировок там нет...


 
__Dmitry__   (2003-08-04 17:08) [36]


> FAR использует свои таблицы для перекодировок туда-обратно


> Ну ты же сам видишь что получается при использовании OemToChar


> цифры языковой привязанности не имеют...



 
__Dmitry__   (2003-08-04 17:10) [37]

Вы что? БОТ к форуму приладили в лице Паладина?
Помоему это не смешно. Алгоритм можно было написать более интересный.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.007 c
8-68410
Opera
2003-04-12 14:11
2003.08.21
Play List


14-68486
Jumbo
2003-08-05 20:20
2003.08.21
Из Си - в Паскаль


4-68581
nikkie
2003-06-15 00:50
2003.08.21
TimedMessageBox


8-68413
DarkwayDiman
2003-04-25 01:32
2003.08.21
Обработчик DirectX


7-68563
SergeyI
2003-06-02 14:54
2003.08.21
Доброго времени суток , вопрос по работе с реестром





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский