|
Вопрос # 6 149/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
Объясните мне пожалуйста такой момент.
Использую две API функции из user32.dll : OemToCharА и OemToCharW
Я понимаю, что OemToCharW для Unicode а OemToCharA для ANSI.
Вопрос в следующем: при чтении из файла верно отрабатывает OemToCharA. Если пробую записать в файл, так же использую OemToCharA, то получаю "кракозябры". При этом, если для записи использую OemToCharW, то на выходе получаю читабельный текст.
И наоборот, если читаю используя OemToCharW, то ничего не меняется. То есть, если я передаю в OemToCharW текст ЋвЄалв д ©«, то на выходе получаю ЋвЄалв д ©«. А если использую OemToCharА, то получаю перекодированный текст "Открыт файл"
Заранее спасибо за ответы.
 |
Вопрос задал: blackhawk (статус: Посетитель)
Вопрос отправлен: 21 мая 2012, 09:53
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 18; последнее сообщение — 21 мая 2012, 15:35; участников в обсуждении: 3.
|
DNK (статус: Студент), 21 мая 2012, 11:39 [#1]:
Что за артефакт такой "выход"? Может у него граната не той системы?
"Digital Networked Knight"
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 11:46 [#2]:
"Результат"
Так лучше?
|
|
DNK (статус: Студент), 21 мая 2012, 11:48 [#3]:
Ничуть
"Digital Networked Knight"
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 11:50 [#4]:
Как тогда объяснить?
|
|
DNK (статус: Студент), 21 мая 2012, 12:01 [#5]:
Я не телепат
"Digital Networked Knight"
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 12:12 [#6]:
Читаем:
OemToCharA ('ЋвЄалв д ©«') = 'Открыт файл'
OemToCharW ('ЋвЄалв д ©«') = 'ЋвЄалв д ©«'
Пишем:
OemToCharA ('Открыт файл') = '+ЄъЁvЄ Їрщы'
OemToCharW ('Открыт файл') = 'Открыт файл'
|
|
DNK (статус: Студент), 21 мая 2012, 12:39 [#7]:
Всё правильно
"Digital Networked Knight"
|
|
min@y™ (статус: Доктор наук), 21 мая 2012, 13:02 [#8]:
Что ты читаешь из файла и что пытаешься туда записать? И в какой кодировке?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 13:30 [#9]:
Читаю в OEM, пишу в ANSI
|
|
min@y™ (статус: Доктор наук), 21 мая 2012, 14:09 [#10]:
Цитата (blackhawk):
Читаю в OEM, пишу в ANSI
А тогда юникодовские функции тебе зачем?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 14:09 [#11]:
DNK: Вот я и прошу объяснить почему так?
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 14:13 [#12]:
min@y™: Потому что, если использую только Ansi-шную OemToCharA , то корректно читаю. А при записи получаю "кракозябры."
Вот если для чтения я использую OemToCharA, а для записи OemToCharW, то все работает.
|
|
min@y™ (статус: Доктор наук), 21 мая 2012, 14:32 [#13]:
Короче, скажи честно, что за задача у тебя? Читать и писать текстовые файлы в DOS-кодировке, чтоли?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 14:37 [#14]:
Да дело даже не в этом. Я понять хочу.
Не обязательно читать или писать в файл.
Даже просто если сообщение выводить.
Хочу понять почему так:
OemToCharA ('ЋвЄалв д ©«') = 'Открыт файл'
OemToCharW ('ЋвЄалв д ©«') = 'ЋвЄалв д ©«'
OemToCharA ('Открыт файл') = '+ЄъЁvЄ Їрщы'
OemToCharW ('Открыт файл') = 'Открыт файл'
|
|
min@y™ (статус: Доктор наук), 21 мая 2012, 15:06 [#15]:
Попробуй явное приведение типов для OemToCharW().
Хрен его знает, никогда не юзал эти функции.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 15:11 [#16]:
То есть OemToCharW() - это некое "явное" приведение?
|
|
min@y™ (статус: Доктор наук), 21 мая 2012, 15:27 [#17]:
Да не, я имел в виду приведение типа параметра.
var
Buffer: array[0..до_хрена - 1] of WideChar;
begin
OemToCharW(PWideChar('ЋвЄалв д ©«'), Buffer);
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 21 мая 2012, 15:35 [#18]:
Хорошо, спасибо
|
21 мая 2012, 15:36: Статус вопроса изменён на решённый (изменил автор вопроса — blackhawk): Исчерпан
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|