Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 149

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
Объясните мне пожалуйста такой момент.
Использую две API функции из user32.dll : OemToCharА и OemToCharW
Я понимаю, что OemToCharW для Unicode а OemToCharA для ANSI.

Вопрос в следующем: при чтении из файла верно отрабатывает OemToCharA. Если пробую записать в файл, так же использую OemToCharA, то получаю "кракозябры". При этом, если для записи использую OemToCharW, то на выходе получаю читабельный текст.
И наоборот, если читаю используя OemToCharW, то ничего не меняется. То есть, если я передаю в OemToCharW текст ЋвЄалв д ©«, то на выходе получаю ЋвЄалв д ©«. А если использую OemToCharА, то получаю перекодированный текст "Открыт файл"

Заранее спасибо за ответы.

blackhawk Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: blackhawk (статус: Посетитель)
Вопрос отправлен: 21 мая 2012, 09:53
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 18; последнее сообщение — 21 мая 2012, 15:35; участников в обсуждении: 3.
DNK

DNK (статус: Студент), 21 мая 2012, 11:39 [#1]:

Что за артефакт такой "выход"? Может у него граната не той системы?
"Digital Networked Knight"
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 11:46 [#2]:

"Результат"
Так лучше?
DNK

DNK (статус: Студент), 21 мая 2012, 11:48 [#3]:

Ничуть
"Digital Networked Knight"
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 11:50 [#4]:

Как тогда объяснить?
DNK

DNK (статус: Студент), 21 мая 2012, 12:01 [#5]:

Я не телепат
"Digital Networked Knight"
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 12:12 [#6]:

Читаем:
OemToCharA ('ЋвЄалв д ©«') = 'Открыт файл'
OemToCharW ('ЋвЄалв д ©«') = 'ЋвЄалв д ©«'

Пишем:
OemToCharA ('Открыт файл') = '+ЄъЁvЄ Їрщы'
OemToCharW ('Открыт файл') = 'Открыт файл'
DNK

DNK (статус: Студент), 21 мая 2012, 12:39 [#7]:

Всё правильно
"Digital Networked Knight"
min@y™

min@y™ (статус: Доктор наук), 21 мая 2012, 13:02 [#8]:

Что ты читаешь из файла и что пытаешься туда записать? И в какой кодировке?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 13:30 [#9]:

Читаю в OEM, пишу в ANSI
min@y™

min@y™ (статус: Доктор наук), 21 мая 2012, 14:09 [#10]:

Цитата (blackhawk):

Читаю в OEM, пишу в ANSI

А тогда юникодовские функции тебе зачем?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 14:09 [#11]:

DNK: Вот я и прошу объяснить почему так?
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 14:13 [#12]:

min@y™: Потому что, если использую только Ansi-шную OemToCharA , то корректно читаю. А при записи получаю "кракозябры."

Вот если для чтения я использую OemToCharA, а для записи OemToCharW, то все работает.
min@y™

min@y™ (статус: Доктор наук), 21 мая 2012, 14:32 [#13]:

Короче, скажи честно, что за задача у тебя? Читать и писать текстовые файлы в DOS-кодировке, чтоли?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 14:37 [#14]:

Да дело даже не в этом. Я понять хочу.
Не обязательно читать или писать в файл.
Даже просто если сообщение выводить.
Хочу понять почему так:

OemToCharA ('ЋвЄалв д ©«') = 'Открыт файл'
OemToCharW ('ЋвЄалв д ©«') = 'ЋвЄалв д ©«'

OemToCharA ('Открыт файл') = '+ЄъЁvЄ Їрщы'
OemToCharW ('Открыт файл') = 'Открыт файл'
min@y™

min@y™ (статус: Доктор наук), 21 мая 2012, 15:06 [#15]:

Попробуй явное приведение типов для OemToCharW().
Хрен его знает, никогда не юзал эти функции.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 15:11 [#16]:

То есть OemToCharW() - это некое "явное" приведение?
min@y™

min@y™ (статус: Доктор наук), 21 мая 2012, 15:27 [#17]:

Да не, я имел в виду приведение типа параметра.
var
  Buffer: array[0..до_хрена - 1] of WideChar;
begin
  OemToCharW(PWideChar('ЋвЄалв д ©«'), Buffer);
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
blackhawk

blackhawk (статус: Посетитель), 21 мая 2012, 15:35 [#18]:

Хорошо, спасибо

21 мая 2012, 15:36: Статус вопроса изменён на решённый (изменил автор вопроса — blackhawk): Исчерпан

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.02 сек.