В чём отличие функций MultiByteToWideChar и AnsiToOem ?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 30.01.19 10:00
Оценка:
В чём заключается отличие функций MultiByteToWideChar/WideCharToMultiByte и AnsiToOem/OemToAnsi ?
1613 г. = 2024 г.
Re: В чём отличие функций MultiByteToWideChar и AnsiToOem ?
От: Videoman Россия https://hts.tv/
Дата: 30.01.19 10:21
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>В чём заключается отличие функций MultiByteToWideChar/WideCharToMultiByte и AnsiToOem/OemToAnsi ?


Первая пара это функции WinAPI переводящие строки из различных однобайтовых кодировок ANSI (OEM — CP437 в том числе) в различные Unicode кодировки и обратно. Названия "дебильные" и ни о чем не говорят.
Вторая пара это не понятно от куда. Могу предположить что переводит из OEM кодировки в заданную ANSI и обратно. Естественно с потерями, т.к. взаимнооднозначного соответствия нет (в OEM только латинские символы и псевдографика).
Re[2]: В чём отличие функций MultiByteToWideChar и AnsiToOem ?
От: B0FEE664  
Дата: 30.01.19 13:23
Оценка:
Здравствуйте, Videoman, Вы писали:

RF>>В чём заключается отличие функций MultiByteToWideChar/WideCharToMultiByte и AnsiToOem/OemToAnsi ?

V>Первая пара это функции WinAPI переводящие строки из различных однобайтовых кодировок ANSI (OEM — CP437 в том числе) в различные Unicode кодировки и обратно.

Функция MultiByteToWideChar переводит не только однобайтовые, но и многобайтовые (мультибайтные?) представления строк. Мультибайтные — это такие, где один символ кодируется одним или большим числом байт. Т.е. в одной строке часть символов кодируется одним байтом, часть — двумя и т.д.. Например UTF-8 — это мультибайтовая кодировка, хотя и Unicode. Насколько я помню, MultiByteToWideChar поддерживает в том числе мультибайтовые не Unicode кодировки (те кодировки, которые использовались до Unicode'а).
И каждый день — без права на ошибку...
Re[3]: В чём отличие функций MultiByteToWideChar и AnsiToOem
От: Videoman Россия https://hts.tv/
Дата: 30.01.19 14:10
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, Videoman, Вы писали:


BFE>Функция MultiByteToWideChar переводит не только однобайтовые, но и многобайтовые (мультибайтные?) представления строк. Мультибайтные — это такие, где один символ кодируется одним или большим числом байт. Т.е. в одной строке часть символов кодируется одним байтом, часть — двумя и т.д.. Например UTF-8 — это мультибайтовая кодировка, хотя и Unicode.


Да. Так и есть. Тогда точнее так: функции переводят из/в ANSI/UNICODE различные кодировки переменной длины в кодировки фиксированной длины. Интересно что они понимают под WideChar ? UCS2 ? Но вроде как Windows уже давно поддерживает полноценный UTF-16. Все-таки логика названия функций от меня ускользает.

P.S. А ну в MSDN так и написано: начиная с Windows Vista все переводится в "настоящий" UTF-16 c суррогатными парами. Т.е. Функции переводят из различных кодировок переменной длины в UTF-16 переменной длины. Н-да-а-а
Отредактировано 30.01.2019 14:15 Videoman . Предыдущая версия . Еще …
Отредактировано 30.01.2019 14:15 Videoman . Предыдущая версия .
Re[4]: В чём отличие функций MultiByteToWideChar и AnsiToOem
От: Videoman Россия https://hts.tv/
Дата: 30.01.19 14:16
Оценка:
Здравствуйте, Videoman, Вы писали:

Глюкануло
Отредактировано 30.01.2019 14:16 Videoman . Предыдущая версия .
Re[2]: В чём отличие функций MultiByteToWideChar и AnsiToOem ?
От: ononim  
Дата: 30.01.19 14:44
Оценка: +1
V>Первая пара это функции WinAPI переводящие строки из различных однобайтовых кодировок ANSI (OEM — CP437 в том числе) в различные Unicode кодировки и обратно. Названия "дебильные" и ни о чем не говорят.
V>Вторая пара это не понятно от куда. Могу предположить что переводит из OEM кодировки в заданную ANSI и обратно. Естественно с потерями, т.к. взаимнооднозначного соответствия нет (в OEM только латинские символы и псевдографика).
Под OEM в винде подразумевается консольная кодировка, используемая в ДОС сессии. Например CP866 — вполне себе русская. Но не соответствует CP1251
Как много веселых ребят, и все делают велосипед...
Re: В чём отличие функций MultiByteToWideChar и AnsiToOem ?
От: ononim  
Дата: 30.01.19 14:46
Оценка: 1 (1) +1
RF>В чём заключается отличие функций MultiByteToWideChar/WideCharToMultiByte и AnsiToOem/OemToAnsi ?
AnsiToOem(src, dst) == {MultiByteToWideChar(CP_ACP, src, tmp); WideCharToMultiByte(CP_OEMCP, tmp, dst)}
Где CP_ACP/CP_OEMCP текущие кодировки, определенные настройками системы.
В правильно настроенной русской винде CP_ACP == CP_1251, а CP_OEMCP == CP866
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.